Mostrar documentos - Erro
- Estou tentando executar um comando sql, só que esta dando um erro. Como sou iniciante preciso de uma ajudinha.
O comando é para mostrar os documentos de um determinado usuario.
Comando:
Pulei linhas apenas para melhor visualizaçao
SELECT aspnet_Membership.UserId, Documentos.DocumentoId, documentosClientes.horaUpload From documentosClientes
INNER JOIN aspnet_Membership on aspnet_Membership.UserId = Documentos.UserId
INNER JOIN Documentos on aspnet_Membership.DocumentoId = documentosClientes.DocumentoId
Erro:
O identificador de várias partes "Documentos.UserId" não pôde ser vinculado.
Nome de coluna inválido 'DocumentoId'.
The multi-part identifier "Documentos.UserId" could not be bound.
Invalid column name 'DocumentoId'.
Minhas tabelas:
aspnet_MemberShip - Contém todas informaçoes do usuario.
- UserId
Documentos - Armazena os documentos.
- DocumentoId
DocumentosClientes - Identificar doc para cada cliente
- UserId
- DocumentoID
- horaUpload
Respostas
- Cacae, rode apenas esse trecho no seu banco de dados e veja o q te retorna.
SELECT Asp.UserId, Docs.DocumentoId, DocCli.HoraUpload FROM AspNet_MemberShip AS Asp LEFT JOIN DocumentosClientes AS DocCli ON Asp.UserId = DocCli.UserId LEFT JOIN Documentos AS Docs ON DocCli.DocumentoId = Docs.DocumentoId
Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino- Marcado como RespostaR. Cacae terça-feira, 3 de novembro de 2009 18:05
Todas as Respostas
- Veja se te ajuda:
SELECT Asp.UserId, Docs.DocumentoId, DocCli.HoraUpload FROM AspNet_MemberShip AS Asp INNER JOIN DocumentosClientes AS DocCli ON Asp.UserId = DocCli.UserId INNER JOIN Documentos AS Docs ON DocCli.DocumentoId = Docs.DocumentoId
se for útil não esquecça de classificar.
att. Leonardo Marcelino- Sugerido como RespostaLeonardo Marcelino quinta-feira, 22 de outubro de 2009 23:28
- Po, não funcionou.
- Meu código ai, caso tenha algo errado.
Eu tambem ja fiz a relação entre as 3 tabelas.
String strConn; strConn = @"string..."; SqlConnection conn; conn = new SqlConnection(); conn.ConnectionString = strConn; SqlCommand cmd; cmd = new SqlCommand(); cmd.CommandText = "SELECT aspNet_MemberShip.UserId, Documentos.DocumentoId, DocumentosClientes.horaUpload FROM aspNet_MemberShip AS aspNet_MemberShip INNER JOIN DocumentosClientes AS DocumentosClientes ON aspNet_MemberShip.UserId = DocumentosClientes.UserId INNER JOIN Documentos AS Documentos ON DocumentosClientes.DocumentoId = Documentos.DocumentoId"; cmd.Connection = conn; conn.Open(); GridView1.DataSource = cmd.ExecuteReader(); GridView1.DataBind(); conn.Close(); - A query esta certa, segue um novo exemplo, apenas mudei de inner join p/ left join, pois caso alguma destas tabela não tenha registro, retorne alguma coisa.
DECLARE @aspnet_MemberShip TABLE (UserId INT IDENTITY(1,1) ) DECLARE @Documentos TABLE (DocumentoId INT IDENTITY(1,1)) DECLARE @DocumentosClientes TABLE ( UserId INT, DocumentoID INT, horaUpload SMALLDATETIME ) INSERT INTO @aspnet_MemberShip DEFAULT VALUES INSERT INTO @aspnet_MemberShip DEFAULT VALUES INSERT INTO @Documentos DEFAULT VALUES INSERT INTO @Documentos DEFAULT VALUES INSERT INTO @DocumentosClientes VALUES (1,1,'20090902 12:00:00') INSERT INTO @DocumentosClientes VALUES (2,1,'20090927 05:00:00') INSERT INTO @DocumentosClientes VALUES (1,1,'20091022 16:40:00') SELECT Asp.UserId, Docs.DocumentoId, DocCli.HoraUpload FROM @AspNet_MemberShip AS Asp LEFT JOIN @DocumentosClientes AS DocCli ON Asp.UserId = DocCli.UserId LEFT JOIN @Documentos AS Docs ON DocCli.DocumentoId = Docs.DocumentoId
att. Leonardo Marcelino - Esse codigo eu coloco do jeito que ta, ou preciso deixar tudo na mesma linha? Porque é muito grande. Pergunta meio estranha, mas ate agora mexi com comandos pequenos. ^^
- o código acima é p/ vc rodar no sql server p/ ver o resultado:
apenas esta parte vc coloca no seu código:
SELECT Asp.UserId, Docs.DocumentoId, DocCli.HoraUpload FROM AspNet_MemberShip AS Asp LEFT JOIN DocumentosClientes AS DocCli ON Asp.UserId = DocCli.UserId LEFT JOIN Documentos AS Docs ON DocCli.DocumentoId = Docs.DocumentoId
att. Leonardo Marcelino - Entendi.
Agora preencheu o gridView, mas só a coluna de UserId, coisa que não era para aparecer. As outra duas colunas ficou em branco. Mas apareceu sem nenhum erro, isso ja é um bom sinal.
Não executei o codigo grande ai no sql server, vou fazer isso agora.
Outra
Sobre o relacionamento das tabelas, eu puxei as chaves primarias da membership e documentos para a documentos clientes, e relaconei os campos. Na parte de relacionamento de tabelas é só isso que tem que fazer né?
Obrigado por estar me ajudando.
- Fui no bd > new query > executei query > parse > salvei em uma pasta;
Apareceu:
UserId DocumentoId HoraupLoad
1 1 hora e data
1 1 hora e data
2 1 hora e data
Acho que deu certo =)
Mas oque eu faço agora? Executando o projeto, aparece só o conteudo da coluna userId no aspx os outros conteudos ficam em branco.
Obs: Tentei modificar as abreviasões na query que voce postou, docClie para documentosClintes e deu erro. Então postei a sua sem modificar. Era para modificar ou não? - Mais ninguem pode ajudar?
- A query funcionou:
UserId DocumentoId HoraupLoad
1 1 hora e data
1 1 hora e data
2 1 hora e data
Apareceu certinho o resultado, id do usuario com o documento. Só não estou conseguindo recuperar isso no gridView. Recuperar apenas a linha da tabela que representa o documento do usuario. - Não tem ninguem com expericencia que possa me explicar/ajudar?
Acho que a maioria quando começou passou por isso. 142 views e só um para responder. - É tão inutil a pergunta, que niguem ajuda, ou da uma dica!
- Cacae, rode apenas esse trecho no seu banco de dados e veja o q te retorna.
SELECT Asp.UserId, Docs.DocumentoId, DocCli.HoraUpload FROM AspNet_MemberShip AS Asp LEFT JOIN DocumentosClientes AS DocCli ON Asp.UserId = DocCli.UserId LEFT JOIN Documentos AS Docs ON DocCli.DocumentoId = Docs.DocumentoId
Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino- Marcado como RespostaR. Cacae terça-feira, 3 de novembro de 2009 18:05
- Aparece o mesmo resultado da print que esta no meu album. Aparece as tres colunas, mas só a UserID que fica preenchida as outras fica em branco.
Agora executando no banco de dados > new query, aparece apenas o UserId preenchido, e as outras colunas NULL - Na ultima linha:
LEFT JOIN Documentos AS Docs ON DocCli.DocumentoId = Docs.DocumentoId
Se eu mudo o LEFT para RIGHT, aparece o ID do documento.
- Quando eu executo aquela query grande, aparece tudo certinho ate a hora.
R.Cacae, primeiro peço desculpas por não ter explicado corretamente aquela "query grande".
ela foi apenas um exemplo q postei p/ vc ter uma base de como se faz o join entre as tabelas ali eu criei uma tabela temporária, inseri os valores e depois fiz a ligação entre elas.
agora, Quanto a só retorna valor na coluna Userid, é devido o fato de estarmos usando o left join para fazer a ligação e pq NÃO HÁ REGISTROS NA TABELA DocumentosClientes onde tenha ligação com a AspNet_MemberShip, ou seja os UserId q constam na tabela AspNet_MemberShip não existem na tabela DocumentosClientes e vise versa.
SELECT Asp.UserId, Docs.DocumentoId, DocCli.HoraUpload
FROM AspNet_MemberShip AS Asp
LEFT JOIN DocumentosClientes AS DocCli ON Asp.UserId = DocCli.UserId
LEFT JOIN Documentos AS Docs ON DocCli.DocumentoId = Docs.DocumentoId
não sei se fui muito claro, porém te aconselho a dar uma lida no blog do gustavo maia, lá tem um artigo sobre JOINS.
Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino- Entendi.
Bom vou dar uma lida no blog.
Mais o problema é só na parte da instrução SQL correto?
A parte das tabelas, relacionamento etc, esta certo ?
Porque se for apenas a instrução o problema, eu vou me aprofundar nisso. Porque ate agora eu estou pesquisando sobre tudo, então se for apenas ela é um item a menos para me preocupar. - Quando eu achar la, eu vou dar uma lida. rsrsss
- mais uma coisa, para acontecer isso tb a falha na relação entre as tabelas.
Veja tb sobre PRIMARY KEY e FOREIGN KEY
Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino mais uma coisa, para acontecer isso tb a falha na relação entre as tabelas.
A parte de relação entre tabelas eu ja fiz. Esta certo, a unica coisa que eu não tenho certeza se esta certo é:
Veja tb sobre PRIMARY KEY e FOREIGN KEY
Na tabela documentosClientes, eu coloquei UserId como primary key, e DocumentoId como unique key, pelo indexes keys. Ai ficou com duas chaves na tabela, e fico assim, Collumns UserId (DESC), DocumentoId(DESC).- Bom, se não foi respondido acredito eu, que esta certo.


