在ASP.NET中使用SelectParameters会给出“必须声明变量”错误

时间:2009-07-02 14:24:21

标签: asp.net data-binding

我有一个ASP SqlDataSource连接到Sybase数据库查询,使用由下拉列表填充的选择参数:

下拉(正常工作):

<asp:SqlDataSource ID="dsBondIDList" runat="server" 
    ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
    ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" 
    SelectCommand="SELECT [name], [bondID] FROM [bonds]">
</asp:SqlDataSource>
<asp:DropDownList ID="lstBondID" runat="server" DataSourceID="dsBondIDList" DataTextField="name" DataValueField="bondID">

带参数的

的SqlDataSource
    <asp:SqlDataSource ID="dsBonds" runat="server" 
        ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
        ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" 
        SelectCommand="SELECT [ticker], [name], [isin], [currency], 
                       [stock], [maturity], [bid], [ask] 
                       FROM [bonds] where [bondID] = @bondID">
        <SelectParameters>
            <asp:ControlParameter Name="bondID" ControlID="lstBondID" PropertyName="SelectedValue" DefaultValue="-1" />
        </SelectParameters>    
    </asp:SqlDataSource>

但是当我尝试运行它时出现错误:

ERROR [HY000] [DataDirect][ODBC Sybase Wire Protocol driver][SQL Server]Must declare  variable '@bondID'.

我当然会得到它我按字面意思运行了sql。我希望ASP引擎在发送查询之前进行替换(并在必要时使用默认值lstBondID)

有人知道为什么@bondID没有被lstBondID.SelectedValue取代?

提前致谢

赖安

1 个答案:

答案 0 :(得分:2)

我刚刚在10分钟前解决了这个问题,这是修复:

如果您需要继续使用您拥有的ODBC驱动程序,请更改您的查询以使用?而不是命名参数。

SELECT [ticker], [name], [isin], [currency], 
[stock], [maturity], [bid], [ask] 
FROM [bonds] where [bondID] = ?

参数按照它们添加到参数集合的顺序使用(当您需要在查询中多次使用该参数时,这会变得毛茸茸)。

否则你可以改变司机。寻找sybdrvodb.dll和regsvr32吧。然后设置您的DSN并使用它。