首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将逗号分隔值传递给SelectCommand的问题

问将逗号分隔值传递给SelectCommand的问题
EN

Stack Overflow用户
提问于 2013-11-04 03:40:31
回答 3查看 1.4K关注 0票数 0

我的.cs文件中有以下代码:

代码语言:javascript
复制
SqlDataSource1.SelectParameters["LocID"].DefaultValue = "5957,5958";

我的.aspx文件中有以下代码

代码语言:javascript
复制
<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类型的。

EN

回答 3

Stack Overflow用户

发布于 2013-11-04 03:47:41

参数不只是像您所认为的那样“插入”到SQL中。尝试将值列表传递到查询并在IN子句中使用这些值是很棘手的。

一些备选方案:

  1. 将值作为字符串传递到存储过程中,存储过程将字符串解析为临时表,然后使用IN
  2. 使用多个参数(LocId1、LocId2等)设置命令并将查询更改为: 选择ID,RoomNum从dbo.Mbiology LocId IN (@LocId1,@LocId2,@LocId3,@LocId4,@LocId5,@LocId6,.)
  3. 将参数保存到不同的表(可能使用"sessionID"键),并从IN子句中提取。
  4. 不支持一个查询中的多个值。
票数 0
EN

Stack Overflow用户

发布于 2013-11-04 03:57:03

SqlDataSource控件不支持这种类型的操作,相反,您至少有以下选项:

  1. 在代码隐藏中构建查询。 受保护的SomeEventHandler(对象发送方,EventArgs e) { //创建字符串列表以保存ID值列表locID=新列表();//构建实际字符串值的列表(SomeControl.Items中的变量项){locIDs.Add(值);} // Build SELECT命令SqlDataSource1.SelectCommand = String.Format("Select,RoomNum from dbo.Mbiology LocId IN ({0}}) ",String.Join(",“,productIDs.ToArray();}
  2. 创建一个存储过程,并将ID值列表作为参数传递。
票数 0
EN

Stack Overflow用户

发布于 2013-11-04 07:02:47

您可以在其中创建过程并动态创建sql查询。你的手术会是这样的-

代码语言:javascript
复制
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会调用这个过程。像这样的东西

代码语言:javascript
复制
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:KuzSQL %>" OnSelecting="DataSourceSelecting"
    SelectCommand="p1_proc" >
    <SelectParameters>
        <asp:Parameter Name="val" />
    </SelectParameters>        
</asp:SqlDataSource>

并且可以将LocIds作为逗号分隔的字符串传递。

代码语言:javascript
复制
SqlDataSource1.SelectParameters["val"].DefaultValue = "5957,5958";
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19761286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档