我有一个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取代?
提前致谢
赖安
答案 0 :(得分:2)
我刚刚在10分钟前解决了这个问题,这是修复:
如果您需要继续使用您拥有的ODBC驱动程序,请更改您的查询以使用?而不是命名参数。
SELECT [ticker], [name], [isin], [currency],
[stock], [maturity], [bid], [ask]
FROM [bonds] where [bondID] = ?
参数按照它们添加到参数集合的顺序使用(当您需要在查询中多次使用该参数时,这会变得毛茸茸)。
否则你可以改变司机。寻找sybdrvodb.dll和regsvr32吧。然后设置您的DSN并使用它。