none
SqlDataSource RRS feed

  • 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)
    terça-feira, 2 de fevereiro de 2010 00:29

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
    terça-feira, 2 de fevereiro de 2010 14:10

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
    terça-feira, 2 de fevereiro de 2010 10:48
  • 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 '<'.
    terça-feira, 2 de fevereiro de 2010 11:09
  • 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
    terça-feira, 2 de fevereiro de 2010 12:02
  • 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 //
    terça-feira, 2 de fevereiro de 2010 12:10
  • 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) -->
    terça-feira, 2 de fevereiro de 2010 12:10
  • 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)... 
    terça-feira, 2 de fevereiro de 2010 12:23
  • Ta dentro de um repeater.
    Eu coloquei um breakpoint no evento  Repeater1_ItemDataBound mas ele nem chega a entrar la e ja da aquela mensagem...

    Neto
    terça-feira, 2 de fevereiro de 2010 12:28
  • 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

    terça-feira, 2 de fevereiro de 2010 12:45
  • Aqui, não  to entendo como você  ta usando  esse SqlDataSource, você ta linkando ele ao repeater pelo DataSourceId correto? O que você ta querendo fazer? mostrar só um produto? todos? 
    terça-feira, 2 de fevereiro de 2010 12:57
  • 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
    terça-feira, 2 de fevereiro de 2010 13:02
  • 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.
    terça-feira, 2 de fevereiro de 2010 13:12
  • 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
    terça-feira, 2 de fevereiro de 2010 13:22
  • 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 ?
    terça-feira, 2 de fevereiro de 2010 13:29
  • alias, faltava um > no final.
    Mas agora continua tratando como um campo
    terça-feira, 2 de fevereiro de 2010 13:29
  • 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

    terça-feira, 2 de fevereiro de 2010 13:33
  • Então tira o  selectCommand dele  e ponhe isso no Repeater Item DataBound


       if (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
    terça-feira, 2 de fevereiro de 2010 13:51
  • 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.

    terça-feira, 2 de fevereiro de 2010 13:56
  • po q vacilo em cara....  realmente tem isso no SqlDataSource

    SelectCommand=" 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
    terça-feira, 2 de fevereiro de 2010 14:03
  • novosql.SelectCommand =

    "SELECT * FROM tamanhos_produtos where codigo_produto='" + e.Item.DataItem["codigo"] + "'";

    Assim ???

    Se eu nao ponho nada ele monta a sql assim

    SELECT * FROM tamanhos_produtos where codigo_produto='System.Data.DataRowView'

    terça-feira, 2 de fevereiro de 2010 14:03
  • 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
    terça-feira, 2 de fevereiro de 2010 14:10
  • Cara, era isso.
    NAO TENHO COMO TE AGRADECER.
    SE PUDER TE POSICIONAR NO FORUM, FAREI ISSO.

    REALMENTE SAO PESSOAS ASSIM COM BOA VONTADE Q NOS FAZEM CRESCER E CONSEQUENTEMENTE, DEUS A ILUMINA TB.

    VALEU MESMO.

    Abracos,
    Neto

    terça-feira, 2 de fevereiro de 2010 14:23