Usuário com melhor resposta
Como faço para unir duas tabelas em um datalist ?

Pergunta
-
Gostaria de unir duas tabelas e mostrar em um datalist.
Meu codigo da page load >
if (!Page.IsPostBack)
{
using (SqlConnection con = new SqlConnection(@"Data Source=E-STATION3-120;Initial Catalog=ForumDB;Integrated Security=True"))
{
using (SqlCommand cmd = new SqlCommand("SELECT * FROM TboProblema ", con))
{
try
{
con.Open();
dtlPosts.DataSource = cmd.ExecuteReader();
dtlPosts.DataBind();
}
finally
{
con.Close();
}
}
}------------------------------------
Se eu tentar apenas botar uma virgula " using (SqlCommand cmd = new SqlCommand("SELECT * FROM TboProblema, MINHAOUTRATABELA ", con)) acontece um erro nessa linha ( dtlPosts.DataSource = cmd.ExecuteReader();)
----------------------------------------------------------
Obrigado desde já
- Editado gnnrz4 segunda-feira, 1 de junho de 2015 17:22
- Movido Roberto F Fonseca segunda-feira, 1 de junho de 2015 17:28 Movido para um fórum mais adequado
Respostas
-
Creio que deve ter sido erro na digitação veja ai a correção:
using (SqlCommand cmd = new SqlCommand("SELECT * FROM TboProblema T1 INNER JOIN TboSugestao T2 ON T1.Id = T2.idSugest ", con))
A vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel
- Editado Mr. GMSOFT terça-feira, 2 de junho de 2015 13:10
- Marcado como Resposta gnnrz4 terça-feira, 2 de junho de 2015 13:50
-
Bom dia!
Quando eu coloquei T1.IdTB1 e T2.IdReferenciaTB1 não era pra você utilizar esses campos você tem que trocar pelos ids das suas respectivas tabelas que como você disse é T1.id e T2.idSugest(se essa for a chave estrangeira). Creio que você deva estudar um pouco mais sobre SQL segue alguns links para auxilia-lo:
http://www.devmedia.com.br/os-nove-passos-do-banco-de-dados/9567
http://www.devmedia.com.br/utilizando-joins-em-sql/1071
Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
- Marcado como Resposta gnnrz4 terça-feira, 2 de junho de 2015 13:50
-
Você executou a query direto no BDs? Esta duplicando os resultados? Os dados repetidos não estão no BDs!?
select Id 'ID', Titulo 'Titulo', Descricao 'Descicao', Setor 'Setor', 'Problema' as 'Tipo' from TboProblema UNION select IdSugest 'ID',TituloSugest 'Titulo', DescricaoSugest 'Descicao', SetorSugest 'Setor', 'Sujestao' as 'Tipo' from TboSugestao
Posta o código COMPLETO da view tenho que ver a estrutura de repetição.
Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
- Marcado como Resposta gnnrz4 quarta-feira, 3 de junho de 2015 15:22
-
Na query que te passei com o UNION o último campo do select é o Tipo veja que esta assim:
select 'Problema' as 'Tipo' from TboProblema
UNION
select 'Sujestao' as 'Tipo' from TboSujestao
Esse campo é utilizado para saber de qual tabela pertence o registro. Basta fazer assim:
<asp:Label style="margin-left:25px;" ID="lblSetor" runat="server" Text='<%# Eval("Tipo") %>' CssClass="newStyle14" />
Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
- Marcado como Resposta gnnrz4 quarta-feira, 3 de junho de 2015 15:59
-
O código esta certo, uma alteração que você pode fazer é a seguinte mas não influência no resultado:
<asp:HyperLink NavigateUrl='<%# String.Format("VerPost1.aspx?ID={0}&TIPO={1}", Eval("ID"), Eval("Tipo")) %>' runat="server" CssClass="newStyle10" text='<%# Eval("Titulo") %>'></asp:HyperLink>
Sua consulta esta trazendo o campo Tipo?
Posta a URL ai para eu dar uma olhada.
Pode verificar aqui: http://forums.asp.net/t/1217322.aspx?Passing+multiple+parameter+in+NavigateUrl+hyperlink+in+GridView+
Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
- Editado Claudinei Nascimento quarta-feira, 3 de junho de 2015 17:57
- Marcado como Resposta gnnrz4 quinta-feira, 4 de junho de 2015 11:13
-
Desculpe a demora, segue.
Do último registro cadastrado para o primeiro:
SELECT * FROM( SELECT Id 'ID', Titulo 'Titulo', Descricao 'Descricao', Setor 'Setor', 'Problema' as 'Tipo', DataCadastro 'DataCadastro' FROM #TboProblema UNION SELECT IdSugest 'ID',TituloSugest 'Titulo', DescricaoSugest 'Descricao', SetorSugest 'Setor', 'Sujestao' as 'Tipo', DataCadastroSugest 'DataCadastro' FROM #TboSugestao ) AS C1 ORDER BY C1.DataCadastro DESC
Do Primeiro registro cadastrado para o último:
SELECT * FROM( SELECT Id 'ID', Titulo 'Titulo', Descricao 'Descricao', Setor 'Setor', 'Problema' as 'Tipo', DataCadastro 'DataCadastro' FROM #TboProblema UNION SELECT IdSugest 'ID',TituloSugest 'Titulo', DescricaoSugest 'Descricao', SetorSugest 'Setor', 'Sujestao' as 'Tipo', DataCadastroSugest 'DataCadastro' FROM #TboSugestao ) AS C1 ORDER BY C1.DataCadastro ASC
Só verifique os campos DATA, não sei quais são os seus mas presumi que fosse isso.
Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
- Editado Claudinei Nascimento sexta-feira, 5 de junho de 2015 00:48
- Marcado como Resposta gnnrz4 sexta-feira, 19 de junho de 2015 11:28
-
Todas as Respostas
-
Se as duas tabelas tiverem a mesma estrutura é utilizar um UNION na sua consulta. Do modo em que você esta fazendo na funciona.
SELECT * FROM TboProblema UNION SELECT * FROM MinhaOutraTablela
Se a estrutura for diferente você deve fazer um JOIN
SELECT * FROM TboProblema T1 INNER JOIN MinhaOutraTablela T2 ON T1.IdTB1 = T2.IdReferenciaTB1
Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
- Editado Claudinei Nascimento segunda-feira, 1 de junho de 2015 17:45
-
As tabelas tem estruturas diferentes ..
o id da tabela tboProblem é id e o da tboSugestao é idSugest
using (SqlCommand cmd = new SqlCommand("SELECT * FROM TboProblema T1 INNER JOIN TboSugestao T2 ON T1.IdTB1 = T2.idSugestTB1 ", con))
Quando executo acontece o seguinte erro
Invalid column name 'IdTB1'.
Invalid column name 'idSugestTB1'.- Editado gnnrz4 terça-feira, 2 de junho de 2015 12:52
-
Creio que deve ter sido erro na digitação veja ai a correção:
using (SqlCommand cmd = new SqlCommand("SELECT * FROM TboProblema T1 INNER JOIN TboSugestao T2 ON T1.Id = T2.idSugest ", con))
A vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel
- Editado Mr. GMSOFT terça-feira, 2 de junho de 2015 13:10
- Marcado como Resposta gnnrz4 terça-feira, 2 de junho de 2015 13:50
-
Bom dia!
Quando eu coloquei T1.IdTB1 e T2.IdReferenciaTB1 não era pra você utilizar esses campos você tem que trocar pelos ids das suas respectivas tabelas que como você disse é T1.id e T2.idSugest(se essa for a chave estrangeira). Creio que você deva estudar um pouco mais sobre SQL segue alguns links para auxilia-lo:
http://www.devmedia.com.br/os-nove-passos-do-banco-de-dados/9567
http://www.devmedia.com.br/utilizando-joins-em-sql/1071
Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
- Marcado como Resposta gnnrz4 terça-feira, 2 de junho de 2015 13:50
-
-
-
-
Não, :( meu datalist não esta sendo atualizado com as informações que cadastro
Como exibo as informações mas creio que não seria aqui o problema e sim no page load onde estava com problema anteriormente
<asp:Label style="margin-left:25px;" ID="Label3" runat="server" Text="Problema :" ForeColor="Red" CssClass="newStyle9"></asp:Label>
<asp:HyperLink NavigateUrl='<%# Eval("ID", "VerPost1.aspx?ID={0}") %>' runat="server" CssClass="newStyle10"><%# Eval("Titulo") %></asp:HyperLink>
<br /><asp:Label style="margin-left:25px;" ID="lblSetor" runat="server" Text='<%# Eval("Setor") %>' CssClass="newStyle14" />
<div id="DivSeparatoria"></div>
<asp:HyperLink NavigateUrl='<%# Eval("ID", "VerPost1.aspx?ID={0}") %>' runat="server" CssClass="newStyle10"><%# Eval("TituloSugest") %></asp:HyperLink>
<br /><asp:Label style="margin-left:25px;" ID="Label4" runat="server" Text='<%# Eval("SetorSugest") %>' CssClass="newStyle14" />--------------------------------------------------------
Meu page load
if (!Page.IsPostBack)
{
using (SqlConnection con = new SqlConnection(@"Data Source=E-STATION3-120;Initial Catalog=ForumDB;Integrated Security=True"))
{
using (SqlCommand cmd = new SqlCommand("SELECT * FROM TboProblema T1 INNER JOIN TboSugestao T2 ON T1.Id = T2.idSugest ", con))
{
try
{
con.Open();
dtlPosts.DataSource = cmd.ExecuteReader();
dtlPosts.DataBind();
}
finally
{
con.Close();
}
}
}
- Editado gnnrz4 terça-feira, 2 de junho de 2015 14:21
-
-
-
As tabelas tem a mesma estrutura? Se sim ao invés de fazer duas tabelas poderia ser só uma ai você identificaria o tipo de ocorrência por um campo na tabela, mas caso queira deixar da forma que esta você pode fazer um UNION, coloca a estrutura de suas tabelas para darmos uma olhada.
Também tem que observar o que Mr. GMSOFT falou.
Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
- Editado Claudinei Nascimento terça-feira, 2 de junho de 2015 16:29
-
-
Sua tabelas não são relacionadas por tanto o inner join não ser, você deve utilizar o UNION:
SQL:
select Id 'ID', Titulo 'Titulo', Descricao 'Descicao', Setor 'Setor', 'Problema' as 'Tipo' from TboProblema UNION select IdSugest 'ID',TituloSugest 'Titulo', DescricaoSugest 'Descicao', SetorSugest 'Setor', 'Sujestao' as 'Tipo' from TboSugestao
ASPX:
<asp:Label style="margin-left:25px;" ID="Label3" runat="server" Text="Problema :" ForeColor="Red" CssClass="newStyle9"></asp:Label> <asp:HyperLink NavigateUrl='<%# Eval("ID", "VerPost1.aspx?ID={0}") %>' runat="server" CssClass="newStyle10"><%# Eval("Titulo") %></asp:HyperLink> <br /> <asp:Label style="margin-left:25px;" ID="lblSetor" runat="server" Text='<%# Eval("Setor") %>' CssClass="newStyle14" /> <div id="DivSeparatoria"></div> <br /><asp:Label style="margin-left:25px;" ID="Label4" runat="server" Text='<%# Eval("Tipo") %>' CssClass="newStyle14" />
Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
-
-
Realmente é muito simples o que você quer fazer. Os dados estão sendo duplicados no select ou na hora de mostrar na tela? Você executou o select direto no bando de dados? Posta o código completo da sua view e do code-behind.
Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
-
Page Load, eu tenei a forma que tu disse e que todos disseram , so que sempre duplica , entao voltei a forma original como estava para apenas uma tabela , mas quero buscar duas tabelas >
using (SqlConnection con = new SqlConnection(@"Data Source=E-STATION3-120;Initial Catalog=ForumDB;Integrated Security=True"))
{
using (SqlCommand cmd = new SqlCommand("SELECT * FROM TboProblema ", con))
{
try
{
con.Open();
dtlPosts.DataSource = cmd.ExecuteReader();
dtlPosts.DataBind();
}
finally
{
con.Close();
}
}
}Estrutura do site >
<asp:Label style="margin-left:25px;" ID="Label3" runat="server" Text="Problema :" ForeColor="Red" CssClass="newStyle9"></asp:Label>
<asp:HyperLink NavigateUrl='<%# Eval("ID", "VerPost1.aspx?ID={0}") %>' runat="server" CssClass="newStyle10"><%# Eval("Titulo") %></asp:HyperLink>
<br /><asp:Label style="margin-left:25px;" ID="lblSetor" runat="server" Text='<%# Eval("Setor") %>' CssClass="newStyle14" />
<div id="DivSeparatoria"></div>
<%--<asp:HyperLink NavigateUrl='<%# Eval("ID", "VerPost1.aspx?ID={0}") %>' runat="server" CssClass="newStyle10"><%# Eval("TituloSugest") %></asp:HyperLink>--%>
<%--<asp:HyperLink NavigateUrl='<%# Eval("ID", "VerPost1.aspx?ID={0}") %>' runat="server" CssClass="newStyle10"><%# Eval("SetorSugest") %></asp:HyperLink>--%>-------------------------------------------------------------------------------------------------------------------------
Estão sendo duplicados na hora da exibição- Editado gnnrz4 quarta-feira, 3 de junho de 2015 13:54
-
Você executou a query direto no BDs? Esta duplicando os resultados? Os dados repetidos não estão no BDs!?
select Id 'ID', Titulo 'Titulo', Descricao 'Descicao', Setor 'Setor', 'Problema' as 'Tipo' from TboProblema UNION select IdSugest 'ID',TituloSugest 'Titulo', DescricaoSugest 'Descicao', SetorSugest 'Setor', 'Sujestao' as 'Tipo' from TboSugestao
Posta o código COMPLETO da view tenho que ver a estrutura de repetição.
Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
- Marcado como Resposta gnnrz4 quarta-feira, 3 de junho de 2015 15:22
-
-
Na query que te passei com o UNION o último campo do select é o Tipo veja que esta assim:
select 'Problema' as 'Tipo' from TboProblema
UNION
select 'Sujestao' as 'Tipo' from TboSujestao
Esse campo é utilizado para saber de qual tabela pertence o registro. Basta fazer assim:
<asp:Label style="margin-left:25px;" ID="lblSetor" runat="server" Text='<%# Eval("Tipo") %>' CssClass="newStyle14" />
Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
- Marcado como Resposta gnnrz4 quarta-feira, 3 de junho de 2015 15:59
-
DEUUUUUUUUUUU CERTOOOOOOOOOOOOOOOOOOOOOOOOO , hahahaha valeu meu !!! ultima coisa como posso fazer para os novos post cadastrados serem os primeiro do data list ?
E para visualizar o post eu fazia assim >
SqlConnection conn = new SqlConnection(@"Data Source=E-STATION3-120;Initial Catalog=ForumDB;Integrated Security=True");
int idPost = Convert.ToInt32(Request.QueryString["ID"]);
Session["idPost"] = idPost;
SqlCommand comm = new SqlCommand("SELECT * FROM TboProblema WHERE id=" + idPost + "", conn);
comm.CommandType = CommandType.Text;
comm.Parameters.Add(new SqlParameter("@Titulo", "Titulo"));
comm.Parameters.Add(new SqlParameter("@Descricao", "Descricao"));
comm.Parameters.Add(new SqlParameter("@Setor", "Setor"));
conn.Open();
DbDataReader dr = comm.ExecuteReader();
while (dr.Read())
{
lblTitulo.Text = dr["Titulo"].ToString();
lblSetor.Text = dr["Setor"].ToString();
lblDescricao.Text = dr["Descricao"].ToString();
}
conn.Close();como posso fazer agr ?
- Editado gnnrz4 quarta-feira, 3 de junho de 2015 15:59
-
Para ordenar os posts você precisa colocar um campo de data de cadastro ai é só ordenar por esse campo.
Para mostrar o registro você pode fazer assim:
View:
<asp:HyperLink NavigateUrl='<%# String.Format("VerPost1.aspx?ID={0}&TIPO={1}", Bind("ID"), Bind("Tipo")) %>' runat="server" CssClass="newStyle10"><%# Eval("Titulo") %></asp:HyperLink>
Code-Behind:
SqlConnection conn = new SqlConnection(@"Data Source=E-STATION3-120;Initial Catalog=ForumDB;Integrated Security=True"); int idPost = Convert.ToInt32(Request.QueryString["ID"]); string tipo = Request.QueryString["TIPO"].toString(); Session["idPost"] = idPost; Session["tipo"] = tipo; string strSQL = string.Format("SELECT IdSugest 'ID',TituloSugest 'Titulo', DescricaoSugest 'Descicao', SetorSugest 'Setor', 'Sujestao' as 'Tipo' FROM TboSugestao WHERE idSugest={0}",idPost); if(tipo.Equals("Problema")) strSQL = string.Format("SELECT Id 'ID', Titulo 'Titulo', Descricao 'Descicao', Setor 'Setor', 'Problema' as 'Tipo' FROM TboProblema WHERE id={0}",idPost); SqlCommand comm = new SqlCommand(strSQL, conn); conn.Open(); DbDataReader dr = comm.ExecuteReader(); while (dr.Read()) { lblTitulo.Text = dr["Titulo"].ToString(); lblSetor.Text = dr["Setor"].ToString(); lblDescricao.Text = dr["Descricao"].ToString(); } conn.Close();
Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
- Editado Claudinei Nascimento quarta-feira, 3 de junho de 2015 16:39
-
Esta dando o seguindo erro no View
Server Error in '/' Application.
Compilation Error
Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.
Compiler Error Message: CS0103: The name 'Bind' does not exist in the current context
Source Error:Line 108: <ItemTemplate> Line 109: Line 110: <asp:HyperLink NavigateUrl='<%# String.Format("VerPost1.aspx?ID={0}&TIPO={1}", Bind("ID"), Bind("Tipo")) %>' runat="server" CssClass="newStyle10"><%# Eval("Titulo") %></asp:HyperLink> Line 111: <asp:HyperLink NavigateUrl='<%# Eval("ID", "VerPost1.aspx?ID={0}") %>' runat="server" CssClass="newStyle10"><%# Eval("Titulo") %></asp:HyperLink> Line 112: <br /><asp:Label style="margin-left:25px;" ID="lblSetor" runat="server" Text='<%# Eval("Setor") %>' CssClass="newStyle14" />
-
-
Troquei
<asp:HyperLink NavigateUrl='<%# String.Format("VerPost1.aspx?ID={0}&TIPO={1}", Eval("ID"), Eval("Tipo")) %>' runat="server" CssClass="newStyle10"><%# Eval("Titulo") %></asp:HyperLink>
Só que o tipo vira titulo , e quando clica para visualizar da esse erro
Server Error in '/' Application.
Referência de objeto não definida para uma instância de um objeto.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.NullReferenceException: Referência de objeto não definida para uma instância de um objeto.
Source Error:Line 28: SqlConnection conn = new SqlConnection(@"Data Source=E-STATION3-120;Initial Catalog=ForumDB;Integrated Security=True"); Line 29: int idPost = Convert.ToInt32(Request.QueryString["ID"]); Line 30: string tipo = Request.QueryString["TIPO"].ToString(); Line 31: Session["idPost"] = idPost; Line 32: Session["tipo"] = tipo;
-
O código esta certo, uma alteração que você pode fazer é a seguinte mas não influência no resultado:
<asp:HyperLink NavigateUrl='<%# String.Format("VerPost1.aspx?ID={0}&TIPO={1}", Eval("ID"), Eval("Tipo")) %>' runat="server" CssClass="newStyle10" text='<%# Eval("Titulo") %>'></asp:HyperLink>
Sua consulta esta trazendo o campo Tipo?
Posta a URL ai para eu dar uma olhada.
Pode verificar aqui: http://forums.asp.net/t/1217322.aspx?Passing+multiple+parameter+in+NavigateUrl+hyperlink+in+GridView+
Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
- Editado Claudinei Nascimento quarta-feira, 3 de junho de 2015 17:57
- Marcado como Resposta gnnrz4 quinta-feira, 4 de junho de 2015 11:13
-
Pronto consegui era apenas um erro de digitação no select da pagina pageload você colocou "decisão" e era "descrição"
Eu tenho o campo data do cadastro e a hora, como posso ordenar para os post cadastrados serem sempre o primeiro ? Essa é a ultima para matar ahahahha.
Muito obrigado mesmo pela força Claudinei Nascimento ....
- Editado gnnrz4 quinta-feira, 4 de junho de 2015 13:17
-
Desculpe a demora, segue.
Do último registro cadastrado para o primeiro:
SELECT * FROM( SELECT Id 'ID', Titulo 'Titulo', Descricao 'Descricao', Setor 'Setor', 'Problema' as 'Tipo', DataCadastro 'DataCadastro' FROM #TboProblema UNION SELECT IdSugest 'ID',TituloSugest 'Titulo', DescricaoSugest 'Descricao', SetorSugest 'Setor', 'Sujestao' as 'Tipo', DataCadastroSugest 'DataCadastro' FROM #TboSugestao ) AS C1 ORDER BY C1.DataCadastro DESC
Do Primeiro registro cadastrado para o último:
SELECT * FROM( SELECT Id 'ID', Titulo 'Titulo', Descricao 'Descricao', Setor 'Setor', 'Problema' as 'Tipo', DataCadastro 'DataCadastro' FROM #TboProblema UNION SELECT IdSugest 'ID',TituloSugest 'Titulo', DescricaoSugest 'Descricao', SetorSugest 'Setor', 'Sujestao' as 'Tipo', DataCadastroSugest 'DataCadastro' FROM #TboSugestao ) AS C1 ORDER BY C1.DataCadastro ASC
Só verifique os campos DATA, não sei quais são os seus mas presumi que fosse isso.
Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
- Editado Claudinei Nascimento sexta-feira, 5 de junho de 2015 00:48
- Marcado como Resposta gnnrz4 sexta-feira, 19 de junho de 2015 11:28
-
-