Usuário com melhor resposta
SqlDataSource

Pergunta
-
Pessoal,
Tenho um SqlDataSource que na parte do SelectCommand, faz um select comparando ao codigo do produto, ao valor de um item do repeater, como esta abaixo:
No entanto, nao esta funcionando.... qual seria a sintaxe correta do select command ?
<asp:SqlDataSource ID="SqlTamanho" runat="server" ConnectionString="<%$ ConnectionStrings:DBConnectionString %>" SelectCommand='SELECT * FROM tamanhos_produtos where codigo_produto="<%#DataBinder.Eval(Container.DataItem, "produto")%>"' ></asp:SqlDataSource>
<asp:DropDownList ID="ddlTamanho" runat="server" Width="150px" DataSourceID="sqlTamanho" DataTextField="nome_tamanho" DataValueField="nome_tamanho" />
Grato,
Neto- Movido AndreAlvesLima terça-feira, 2 de fevereiro de 2010 12:11 Migrado de .Net Dvlp Geral (De:.NET Development - Geral)
Respostas
-
desse jeito seria assim:SELECT * FROM tamanhos_produtos where codigo_produto='" + ((System.Data.DataRowView)(e.Item.DataItem)).Row["codigo].toString() + "'";Assim, tenho quase certeza que funciona.
- Marcado como Resposta AGA Neto terça-feira, 2 de fevereiro de 2010 14:23
Todas as Respostas
-
Amigo, a sintaxe esta correta, acho que seria porque nessa parte tem aspas duplas no produto e no databinder.
<asp:SqlDataSource ID="SqlTamanho" runat="server" ConnectionString="<%$ ConnectionStrings:DBConnectionString %>" SelectCommand='SELECT * FROM tamanhos_produtos where codigo_produto="<%#DataBinder.Eval(Container.DataItem, "produto")%>"' ></asp:SqlDataSource>
Tenta usar sem aspas duplas no Databinder:<asp:SqlDataSource ID="SqlTamanho" runat="server" ConnectionString="<%$ ConnectionStrings:DBConnectionString %>" SelectCommand='SELECT * FROM tamanhos_produtos where codigo_produto=<%#DataBinder.Eval(Container.DataItem, "produto")%>' ></asp:SqlDataSource>
Abraços,André Luiz de Rocha Castro -
Nao da...
Incorrect syntax near '<'.
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.Data.SqlClient.SqlException: Incorrect syntax near '<'. -
Opa, realmente... =O tenta assim:
<asp:SqlDataSource ID="SqlTamanho" runat="server" ConnectionString="<%$ ConnectionStrings:DBConnectionString %>" SelectCommand='<%# "SELECT * FROM tamanhos_produtos where codigo_produto=" + DataBinder.Eval(Container.DataItem, "produto")%>' > </asp:SqlDataSource>
Abraços,André Luiz de Rocha Castro -
Prezado,
Estou migrando seu post para o fórum de Desenvolvimento Web Geral.
Por favor, nas próximas vezes em que for postar alguma dúvida relacionada a desenvolvimento Web ou Asp.Net, poste em um dos fóruns abaixo da categoria "Web Development".
Obrigado!
André Alves de Lima // Visite o meu site: http://andrealveslima.spaces.live.com // -
Nossa, agora ferrou de vez... huauuhahu
Server Error in '/SITE_AspNet' Application.
Incorrect syntax near 'com'.
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.Data.SqlClient.SqlException: Incorrect syntax near 'com'.
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:
[SqlException (0x80131904): Incorrect syntax near 'com'.] System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) +1950890 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) +4846875 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) +194 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +2392 System.Data.SqlClient.SqlDataReader.ConsumeMetaData() +33 System.Data.SqlClient.SqlDataReader.get_MetaData() +83 System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) +297 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) +954 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) +162 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) +32 System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) +141 System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) +12 System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior) +10 System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +130 System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +287 System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable) +92 System.Web.UI.WebControls.SqlDataSourceView.ExecuteSelect(DataSourceSelectArguments arguments) +1297 System.Web.UI.WebControls.ListControl.OnDataBinding(EventArgs e) +95 System.Web.UI.WebControls.ListControl.PerformSelect() +34 System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +73 System.Web.UI.Control.DataBindChildren() +211 System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) +102 System.Web.UI.Control.DataBind() +15 System.Web.UI.WebControls.Repeater.CreateItem(Int32 itemIndex, ListItemType itemType, Boolean dataBind, Object dataItem) +124 System.Web.UI.WebControls.Repeater.CreateControlHierarchy(Boolean useDataSource) +443 System.Web.UI.WebControls.Repeater.OnDataBinding(EventArgs e) +51 System.Web.UI.WebControls.Repeater.DataBind() +75 System.Web.UI.WebControls.Repeater.EnsureDataBound() +55 System.Web.UI.WebControls.Repeater.OnPreRender(EventArgs e) +15 System.Web.UI.Control.PreRenderRecursiveInternal() +80 System.Web.UI.Control.PreRenderRecursiveInternal() +171 System.Web.UI.Control.PreRenderRecursiveInternal() +171 System.Web.UI.Control.PreRenderRecursiveInternal() +171 System.Web.UI.Control.PreRenderRecursiveInternal() +171 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +842
Version Information: Microsoft .NET Framework Version:2.0.50727.3603; ASP.NET Version:2.0.50727.3082 <!-- [SqlException]: Incorrect syntax near 'com'. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) at System.Data.SqlClient.SqlDataReader.ConsumeMetaData() at System.Data.SqlClient.SqlDataReader.get_MetaData() at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) at System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior) at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable) at System.Web.UI.WebControls.SqlDataSourceView.ExecuteSelect(DataSourceSelectArguments arguments) at System.Web.UI.WebControls.ListControl.OnDataBinding(EventArgs e) at System.Web.UI.WebControls.ListControl.PerformSelect() at System.Web.UI.WebControls.BaseDataBoundControl.DataBind() at System.Web.UI.Control.DataBindChildren() at System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) at System.Web.UI.Control.DataBind() at System.Web.UI.WebControls.Repeater.CreateItem(Int32 itemIndex, ListItemType itemType, Boolean dataBind, Object dataItem) at System.Web.UI.WebControls.Repeater.CreateControlHierarchy(Boolean useDataSource) at System.Web.UI.WebControls.Repeater.OnDataBinding(EventArgs e) at System.Web.UI.WebControls.Repeater.DataBind() at System.Web.UI.WebControls.Repeater.EnsureDataBound() at System.Web.UI.WebControls.Repeater.OnPreRender(EventArgs e) at System.Web.UI.Control.PreRenderRecursiveInternal() at System.Web.UI.Control.PreRenderRecursiveInternal() at System.Web.UI.Control.PreRenderRecursiveInternal() at System.Web.UI.Control.PreRenderRecursiveInternal() at System.Web.UI.Control.PreRenderRecursiveInternal() at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) [HttpUnhandledException]: Exception of type 'System.Web.HttpUnhandledException' was thrown. at System.Web.UI.Page.HandleError(Exception e) at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) at System.Web.UI.Page.ProcessRequest() at System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext context) at System.Web.UI.Page.ProcessRequest(HttpContext context) at ASP.compreagora_aspx.ProcessRequest(HttpContext context) in c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\site_aspnet\92b28064\241a8c1a\App_Web_qhvcjrdq.2.cs:line 0 at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) --> -
hmmm... Acredito que isso ja seja outra coisa... tem duas coisas que vc pode fazer, primeiro eu procura por esse tal de "com" no documento, talvez seja algum codigo que você não comentou, string no lugar errado, sei la... da um ctrl F e vê se tem algo errado.
E segundo: isso ta dentro de um gridview/datagrid correto? vai no evento Databound e ponhe um breakpoint la dentro... olha se o codigo que esta sendo passado para query esta certo mesmo (o codigo do produto)... -
-
Olha so, esse COM ele esta puxando do
DataBinder.Eval(Container.DataItem, "produto") %>
mas na verdade, no lugar de produto tem q ser o codigo e isso eu ja arrumei.
No entanto, agora ele da a mensagem:
Invalid column name 'CO650'.
Acontece que esse C0650 é o valor que retorna do databinder.....
e o sistema ta encarando isso como uma coluna e nao comparando o campo codigo_produto com o valor CO650...
Ou seja, trata o C0650 como campo e nao como valor...
Neto -
-
Cada linha do repeater monta um dropdownlist.
E cada dropdownlist, tem um sqldatasource diferente.
ex:
Select * from tamanhos_produtos where codigo_produto = "A01"
Select * from tamanhos_produtos where codigo_produto = "A02"
Select * from tamanhos_produtos where codigo_produto = "A03"
O que muda de um pro outro é exatamente o que o databinder tras.
Entao criamos o SqlDataSource:
<
asp:SqlDataSource ID="SqlTamanho" runat="server" ConnectionString="<%$ ConnectionStrings:DBConnectionString %>" SelectCommand='<%# "SELECT * FROM tamanhos_produtos where codigo_produto=" + DataBinder.Eval(Container.DataItem, "codigo") %>'
E dai o sistema gera os selects automaticamente.
Agora o unico problema, é q ao inves do sistema tratar o que retorna do databinder como valor e comparar com o campo, ele trata o q volta do databinder tb como campo.
Neto -
Então deve ser por causa que fica sem aspas, certo.... tenta isso:<asp:SqlDataSource ID="SqlTamanho" runat="server" ConnectionString="<%$ ConnectionStrings:DBConnectionString %>" SelectCommand='<%# "SELECT * FROM tamanhos_produtos where codigo_produto=\"" + DataBinder.Eval(Container.DataItem, "codigo") + "\""%>'Ai eh adicionado aspas ao codigo, ja q não eh numerico.
-
Error 1 The server tag is not well formed.
Error 2 Literal expressions like '<%$ ConnectionStrings:DBConnectionString %>' are not allowed. Use <asp:Literal runat="server" Text="<%$ ConnectionStrings:DBConnectionString%>" /> instead.
Deu isso -
Dexa eu te perguntar, se vc por uma query normal no SQLDataSource funciona? tipo "select * from FROM tamanhos_produtos where codigo_produto= 2"por exemplo sem o databinder, funciona? pq ai vc pode saber aonde esta o erro, pelo menos não estaria no SelectCommand, saca?esse ConnectionStrings:DBConnectionString para ser honesto eu nunca usei... se mesmo depois de por uma query "estatica" no selectcommand continuar com esse erro, vc pode tentar por a conexão de string toda ai.E outra coisa o nome da sua string de conexão eh DBConnectionString mesmo ?
-
-
SE EU COLOCAR:
SelectCommand="SELECT * FROM tamanhos_produtos where codigo_produto='CAM707'">
Ele funciona corretamente.
o DBConnectionString é apenas o nome que busca minha conexao do web.config.
O problema esta em encaixar o valor do databinder dentro desse 'CAM707'.Neto
-
Então tira o selectCommand dele e ponhe isso no Repeater Item DataBoundif (e.Item.ItemType == ListItemType.Item){SqlDataSource novosql = (SqlDataSource)e.Item.FindControl("SqlTamanho");// Você vai ter que mexer no e.Item.Data e pegar o campo que você quer.novosql.SelectCommand = "SELECT * FROM tamanhos_produtos where codigo_produto='" + e.Item.DataItem + "'";}Só vai ter que mexer no e.item.DataItem, qualquer coisa ponhe um breakpoint nessa linha e usa o Watch para ver qual o campo
-
ta bom, mas se a gente conseguir tb colocar o valor como parametro, acho q da certo.
<SelectParameters>
<asp:Parameter Name="CodigoProduto" Type="String" DefaultValue='<%#DataBinder.Eval (Container.DataItem, "codigo")%>' />
</SelectParameters>
No entanto assim da erro. -
po q vacilo em cara.... realmente tem isso no SqlDataSourceSelectCommand=" SELECT * FROM [tamanhos_produtos] where [codigo_produto]='@CodigoProduto' "e mais esse SelectParameter seu, só tenho duvida com relação a essa 'Aspas Simples' no @CodigoProduto
-
novosql.SelectCommand =
"SELECT * FROM tamanhos_produtos where codigo_produto='" + e.Item.DataItem["codigo"] + "'";
Assim ???
Se eu nao ponho nada ele monta a sql assimSELECT * FROM tamanhos_produtos where codigo_produto='System.Data.DataRowView'
-
desse jeito seria assim:SELECT * FROM tamanhos_produtos where codigo_produto='" + ((System.Data.DataRowView)(e.Item.DataItem)).Row["codigo].toString() + "'";Assim, tenho quase certeza que funciona.
- Marcado como Resposta AGA Neto terça-feira, 2 de fevereiro de 2010 14:23
-