我的.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类型的。
发布于 2013-11-04 03:47:41
参数不只是像您所认为的那样“插入”到SQL中。尝试将值列表传递到查询并在IN子句中使用这些值是很棘手的。
一些备选方案:
INLocId1、LocId2等)设置命令并将查询更改为:
选择ID,RoomNum从dbo.Mbiology LocId IN (@LocId1,@LocId2,@LocId3,@LocId4,@LocId5,@LocId6,.)"sessionID"键),并从IN子句中提取。发布于 2013-11-04 03:57:03
SqlDataSource控件不支持这种类型的操作,相反,您至少有以下选项:
发布于 2013-11-04 07:02:47
您可以在其中创建过程并动态创建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>并且可以将LocIds作为逗号分隔的字符串传递。
SqlDataSource1.SelectParameters["val"].DefaultValue = "5957,5958";https://stackoverflow.com/questions/19761286
复制相似问题