Modificar dataset para aceitar consulta em multiplas tabelas

20/08/2009

Prezados,   Fiz um dataset para responder a uma consulta na tabela e funcionou bem, ocorre que agora precisei fazer uma consulta diferente, onde existe dois select.   Mas o sistema retorna apenas o primeiro select e ignora o segundo, por favor LEIA o código abaixo e me informe como posso alterá-lo sem perder suas principais caracteristicas para mostrar também o segundo ou terceiro select....     Valeu!!!!   DataSet dsReultado; //em caso de algum erro inesperado na procedure o sistema informa o erro e mostra a mensagem gerada pela procedure try { dsReultado = executaProcedure.ExecuteDataSet(); } catch (Exception ex) { return new RetornoWebService(TipoRetornoWebService.Erro, String.Format("Ocorreu um erro ao executar o comando de inclusÆo. Mensagem do servidor: ", ex.Message)); } //se a procedure retornar um resultado usa este resultado senÆo retorna um erro informando que a procedure nÆo retornou resultados if (dsReultado.Tables.Count > 0 && dsReultado.Tables[0].Rows.Count > 0) return new RetornoWebService((TipoRetornoWebService)Convert.ToInt32(dsReultado.Tables[0].Rows[0][0]), Convert.ToString(dsReultado.Tables[0].Rows[0][1])); else return new RetornoWebService(TipoRetornoWebService.Erro, "A StoredProcedure nÆo retornou resposta de resultado.");
Régis Mello

Régis Mello

Curtidas 0

Respostas

Fabio Mans

Fabio Mans

20/08/2009

Olá Régis   Seria necessário eu ver o seu select, mas pelo que estou vendo no código abaixo se o seu DataSet conter mais de uma tabela basta mudar o índice.   Exemplo     dsReultado.Tables[0].Rows[0] - Select 1 dsReultado.Tables[1].Rows[0] - Select 2     Espero ter ajudado   Fabio   ========================================== DataSet dsReultado; //em caso de algum erro inesperado na procedure o sistema informa o erro e mostra a mensagem gerada pela procedure try { dsReultado = executaProcedure.ExecuteDataSet(); } catch (Exception ex) { return new RetornoWebService(TipoRetornoWebService.Erro, String.Format("Ocorreu um erro ao executar o comando de inclusÆo. Mensagem do servidor: ", ex.Message)); } //se a procedure retornar um resultado usa este resultado senÆo retorna um erro informando que a procedure nÆo retornou resultados if (dsReultado.Tables.Count > 0 && dsReultado.Tables[0].Rows.Count > 0) return new RetornoWebService((TipoRetornoWebService)Convert.ToInt32(dsReultado.Tables[0].Rows[0][0]), Convert.ToString(dsReultado.Tables[0].Rows[0][1])); else return new RetornoWebService(TipoRetornoWebService.Erro, "A StoredProcedure nÆo retornou resposta de resultado.");
GOSTEI 0
Régis Mello

Régis Mello

20/08/2009

Olha não funcionou, fiz uma alteração ficou como abaixo, mas também só vem uma consulta. O select está embaixo do método: [WebMethod] public DataTable SelectAllUser( string Identifier, int Language) { DBAccess executaProcedure = new DBAccess(); executaProcedure.SetCommandType(CommandType.StoredProcedure); executaProcedure.CommandText = "schUser.SELECT_ALL_USER_EZ"; #region Insere Parametros para a Procedure   executaProcedure.AddParameter("@Identifier", Identifier); executaProcedure.AddParameter("@Language", Language);   #endregion return executaProcedure.ExecuteDataSet().Tables[0];   -- Mesmo INSERINDO TABLER[1] AQUI TAMBÉM NÃO FUNCIONOU. --------------------------------------------------------------------------------------------- ALTER PROCEDURE [schUser].[SELECT_ALL_USER_EZ] ( @Identifier nvarchar(50), @Language int ) AS BEGIN --DECLARE @Identifier nvarchar(50) DECLARE @IdPartner INT DECLARE @Description NVARCHAR(255) IF NOT EXISTS(SELECT 1 FROM schAdmin.Partners WHERE Identifier = @Identifier) BEGIN SELECT @Description = [DESCRIPTION] FROM schAdmin.Errors WHERE IdError = 100 AND [Language] = @Language SELECT 2 AS TIPO, @Description AS MENSAGEM END ELSE BEGIN SELECT @IdPartner = IDPARTNER FROM schAdmin.Partners WHERE Identifier = @Identifier --SE EXISTE USUÀRIO NO BANCO PARA ESTE @Identifier BEGIN SELECT schUser.Users.IdUser as UserNum, schUser.Users.DocFormat as FormatoDoc, schUser.Users.DocNum as CPF_CNPJ, schUser.Users.RegNum as RG, schUser.Users.RegFrom as OrgaoEmissor, schUser.Users.Title as Titulo, schUser.Users.FirstName as PrimeiroNome, schUser.Users.MiddleName as NomeDoMeio, schUser.Users.LastName as Sobrenome, schUser.Users.Birth as DataNascimento, schUser.Users.Sex as Sexo, schUser.PhoneContact.DDD, schUser.PhoneContact.PhoneContactDay as MelhorHora, schUser.PhoneContact.PhoneNumType as TipoDeTelefone, schUser.PhoneContact.PhoneNumber as TelefonePrincipal, schUser.EmailAddress.TypeEmail as EmailPrincipal, schUser.EmailAddress.EmailAddress as Email, schUser.EmailAddress.EmailFormat as FormatoDoEmail, schUser.Address.AddressType as TipoEndereco, schUser.Address.AddressNumber as Numero, schUser.Address.AddressInfo as Complemento, schUser.Address.InfoReference as PontoDeReferencia, schAdmin.PostalCode.City as Cidade, schAdmin.PostalCode.Address as Endereco, schAdmin.PostalCode.Ward as Bairro, schAdmin.PostalCode.PostalCode as CEP, schAdmin.PostalCode.TypeAddress as Logradoro, schAdmin.PostalCode.SState as Estado FROM schUser.Users INNER JOIN schUser.PhoneContact ON schUser.Users.IdUser = schUser.PhoneContact.IdUser INNER JOIN schUser.EmailAddress ON schUser.Users.IdUser = schUser.EmailAddress.IdUser INNER JOIN schUser.Address ON schUser.Users.IdUser = schUser.Address.IdUser INNER JOIN schAdmin.PostalCode ON schUser.Address.IdPostalCode = schAdmin.PostalCode.IdPostalCode WHERE (schUser.Users.IdPartner = @IdPartner) AND (schUser.Users.Activated = 'T') AND (schUser.EmailAddress.TypeEmail = 'M') AND (schUser.Address.AddressType = 'Home' OR schUser.Address.AddressType = 'Both') AND (schUser.PhoneContact.PhoneType = 'M') -- Segundo Select.... SELECT IdEmail, EmailAddress, EmailFormat FROM schUser.EmailAddress WHERE UPPER(TypeEmail) = 'S' AND (IdPartner = @IdPartner) END END END OBRIGADO
GOSTEI 0
Fabio Mans

Fabio Mans

20/08/2009

Eu não tenho como rodar sua query por não ter a estrutura, mas é fácil saber o conteúdo do seu Dataset.

Perceba que nas telas abaixo eu recupero um DataTable, no momento que eu crio eu consigo visualizar o conteúdo clicando na lupa, faça o mesmo, no meu caso como ele é um DataTable só tem uma linha, se você diz que o seu select retorna duas consultas então ele tem que ter dois DataTables que é um DataSet. Confirme fazendo um debug.

Em seguida recupere pelo índice.


Exemplo 1 - No Debug em dt eu consigo ver o valor do DataTable




Exemplo 2 - Conteúdo do DataTable - perceba que só tenho um resultado.


Com estes exemplos você consegue visualizar porque não recupera o segundo select.



Espero ter ajudado

Fabio


GOSTEI 0
Devmedia

Devmedia

20/08/2009

Régis,
a resposta do consultor foi suficiente? Podemos encerrar o chamado?
GOSTEI 0
Régis Mello

Régis Mello

20/08/2009

Acho que não consegui passar para ele claramente o que eu precisava.   Att Regis
GOSTEI 0
Devmedia

Devmedia

20/08/2009

Régis,
em que vc ainda tem dúvidas?
Para deixar sua dúvida mais clara seria a gravação de um video mostrando ao consultor em que vc ainda tem dúvidas.
caso não saiba como fazer isso, assista ao video explicativo que está ao lado da opção "meus videos" na home do suporte.
GOSTEI 0
POSTAR