我的.cs文件中有以下代码:
SqlDataSource1.SelectParameters["LocID"].DefaultValue = "5957,5958";
我的.aspx文件中有以下代码
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:KuzSQL %>" OnSelecting="DataSourceSelecting"
SelectCommand="Select ID, RoomNum from [dbo].[Mbiology] WHERE LocId IN (@LocId)" >
<SelectParameters>
<asp:Parameter Name="LocId" />
</SelectParameters>
</asp:SqlDataSource>
我收到以下错误:
将nvarchar值'5957,5958'转换为数据类型int。
时转换失败
请注意,LocId的类型为Int。
答案 0 :(得分:0)
参数不仅仅像你想象的那样“插入”SQL。尝试将值列表传递给查询并在IN
子句中使用它们是很棘手的。
一些选项:
IN
使用多个参数(LocId1
,LocId2
等)设置您的命令,并将您的查询更改为:
Select ID, RoomNum from [dbo].[Mbiology]
WHERE LocId IN (@LocId1, @LocId2, @LocId3, @LocId4, @LocId5, @LocId6, ...)
"sessionID"
键)并从IN
子句中删除。答案 1 :(得分:0)
SqlDataSource
控件不支持此类操作,而是至少包含以下选项:
在代码隐藏中构建查询。
protected void SomeEventHandler(object sender, EventArgs e)
{
// Create list of strings to hold ID values
List<string> locIDs = new List<string>();
// Build list of actual string values
foreach (var item in SomeControl.Items)
{
locIDs.Add(value);
}
// Build SELECT command
SqlDataSource1.SelectCommand = String.Format("Select ID, RoomNum from [dbo].[Mbiology] WHERE LocId IN ({0})",
String.Join(", ", productIDs.ToArray()));
}
创建存储过程并将ID值列表作为参数传递。
答案 2 :(得分:0)
您可以创建一个过程并在其中动态创建SQL查询。你的程序会是这样的 -
create procedure p1_proc
@val varchar(250)
as
begin
declare @sql as varchar(500)
set @sql = 'Select ID, RoomNum from [dbo].[Mbiology] WHERE LocId IN ('+@val+')'
exec(@sql)
end
所以你的sqldatasource
会调用此程序。像这样的东西
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:KuzSQL %>" OnSelecting="DataSourceSelecting"
SelectCommand="p1_proc" >
<SelectParameters>
<asp:Parameter Name="val" />
</SelectParameters>
</asp:SqlDataSource>
您可以将LocId
s作为逗号分隔的字符串传递。
SqlDataSource1.SelectParameters["val"].DefaultValue = "5957,5958";