如何将SQL参数中的字符串数组传递给SQL中的IN子句

拉里曼丹兰

我正在以复杂的方式执行的逻辑。

我只需要在存储过程中执行此查询:

select Sizes, SUM(Quantity)
from tbl_SizeBreakup
where (Brand=@brand)
  and (Combo in ('1','2')) ...

我必须在C#中使用的SQL参数中传递的组合是

DataSet dt = new DataSet();
cmd = new SqlCommand();
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.CommandText = "sp_Accessories";
cmd.Connection = con;

cmd.Parameters.AddRange(
    new SqlParameter[] {
        new SqlParameter("@Mode",mode),
        new SqlParameter("@Combo",combo),
    }}

因此,如果我传递1参数,则按预期方式工作。我应该通过的组合是一个string[](字符串数组)。数组长度可以是任何值,取决于用户在UI中选择的长度。

我的问题是,如何传递string[]new SqlParameter("@Combo",combo)

我的存储过程

ALTER proc [dbo].[sp_Accessories]
(  
@Mode varchar(50)=null,
@id int=null,
@brand varchar(50)=null,
@department varchar(MAX)=null,
@season varchar(50)=null,
@groupname varchar(MAX)=null,
@styles varchar(50)=null,
@combo varchar(50)=null,
@combo_color nvarchar(max)=null,
)
as
if @Mode='getsizewise'
begin
select Sizes,SUM(Quantity) from tbl_SizeBreakup where (Brand=@brand) and (Department=@department) and (Season=@season) and (Group_Name=@groupname) and (Style=@styles) 
and (Combo_Color=@color) and (Total_Add_Qty='Total Quantity') Group By Sizes
end
Zohar Peled

简介:尽管OP已经接受了一个答案,但我认为最好分享自己的经验,因为我相信我将要展示的方法要比接受的方法更好。

我发现将数组传递到sql服务器数据库的最佳方法是使用auser defined table type和c#DataTable在您的情况下,由于您要传递一维的字符串数组,因此相当简单:

首先,您需要在数据库中创建用户定义的表类型:

 CREATE TYPE dbo.StringArray As Table (
    StringItem varchar(50) -- you can use any length suited for your needs
)

然后,您需要在C#代码中创建一个数据表:

DataTable dt = new DataTable();
dt.Columns.Add("StringItem", typeof(System.String));

然后更改您的存储过程以接受此数据类型作为参数:

ALTER proc [dbo].[sp_Accessories]
(  
@Mode varchar(50)=null,
@id int=null,
@brand varchar(50)=null,
@department varchar(MAX)=null,
@season varchar(50)=null,
@groupname varchar(MAX)=null,
@styles varchar(50)=null,
@combo dbo.StringArray Readonly=null, -- NOTE THIS CHANGE
@combo_color nvarchar(max)=null,
)
as
if @Mode='getsizewise'
begin
select Sizes,SUM(Quantity) from tbl_SizeBreakup where (Brand=@brand) and
(Department=@department) and (Season=@season) and (Group_Name=@groupname) and (Style=@styles) 
and (Combo_Color=@color) and (Total_Add_Qty='Total Quantity') 
and comboColumn in(select StringItem from @Combo) -- NOTE THIS CHANGE
Group By Sizes
end

然后,您需要在c#代码中将字符串数组转换为dataTable。

foreach (string s in YourStringArray) {
    string[] temp = {s};
    dt.Rows.Add(temp);
}

将DataTable作为参数添加到存储过程中:

System.Data.SqlClient.SqlParameter sp = new Data.SqlClient.SqlParameter();
sp.SqlDbType = SqlDbType.Structured;
sp.Value = dt;
sp.ParameterName = "@Combo";
cmd.Parameters.Add(sp);

生成并运行。

与使用sql用户定义的函数相比,此方法应具有更好的性能,并且还可以用于不同的数据类型。这是使用它的最佳理由之一:考虑一种需要传递日期数组的情况:csv方法要求sql将每个字符串转换为日期,而使用这种方法,您可以按原样传递日期,无需将它们转换为字符串然后再返回日期。此外,您可以传递2维数组或字典,您所要做的就是在sql数据库中创建适当的用户定义数据类型。

注意:此处直接编写代码,可能会有一些错别字。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

如何将字符串值传递给angular2中的组件

来自分类Dev

如何将字符串数组传递给需要字符串但不在数组中的ruby方法?

来自分类Dev

在VBA中,如何将字符串拆分为数组,然后将其作为参数传递给Sub或Function

来自分类Dev

如何将字符串参数传递给按钮onclick事件中的函数

来自分类Dev

将字符串数组传递给C中的函数

来自分类Dev

如何将数组传递给sql?

来自分类Dev

如何将模型或字符串传递给angularjs中的指令?

来自分类Dev

如何将变量中存储的字符串从bash脚本传递到sybase SQL IN子句

来自分类Dev

如何将Swift字符串数组传递给带有char **参数的C函数

来自分类Dev

如何将参数传递给webapi中的数组类?

来自分类Dev

如何将字符串传递给Java中的方法(就内存而言)

来自分类Dev

如何将字符数组传递给字符串

来自分类Dev

我如何将列表,数组或字符串作为参数传递给redshift

来自分类Dev

如何将查询字符串参数传递给Laravel4中的路由

来自分类Dev

如何将字符串数组传递给需要字符串但不在数组中的ruby方法?

来自分类Dev

PL / SQL:将字符串的“数组”作为参数传递给sql

来自分类Dev

如何将非拉丁字符串传递给Django中的url参数?

来自分类Dev

如何将字符串参数传递给jQuery

来自分类Dev

如何将MVC DropDownList的字符串值作为参数传递给控制器中的方法?

来自分类Dev

BASH:如何将数组中的字符串作为参数传递给命令?

来自分类Dev

如何将动态范围字符串文本传递给EXCEL VBA中的SQL查询IN子句

来自分类Dev

如何将字符串(varchar)传递到SQL存储过程中?

来自分类Dev

如何将字符串变量传递给动态sql中的where子句

来自分类Dev

如何将字符串作为参数传递给需要R中的变量的函数

来自分类Dev

如何将参数传递给数组中的函数?

来自分类Dev

如何将字符串数组传递给函数?

来自分类Dev

将 Oracle 参数传递给 SQL 字符串

来自分类Dev

如何将字符串数组传递给 C 中的另一个函数

来自分类Dev

如何将文件数组以及java脚本中的其他字符串/int变量传递给php

Related 相关文章

  1. 1

    如何将字符串值传递给angular2中的组件

  2. 2

    如何将字符串数组传递给需要字符串但不在数组中的ruby方法?

  3. 3

    在VBA中,如何将字符串拆分为数组,然后将其作为参数传递给Sub或Function

  4. 4

    如何将字符串参数传递给按钮onclick事件中的函数

  5. 5

    将字符串数组传递给C中的函数

  6. 6

    如何将数组传递给sql?

  7. 7

    如何将模型或字符串传递给angularjs中的指令?

  8. 8

    如何将变量中存储的字符串从bash脚本传递到sybase SQL IN子句

  9. 9

    如何将Swift字符串数组传递给带有char **参数的C函数

  10. 10

    如何将参数传递给webapi中的数组类?

  11. 11

    如何将字符串传递给Java中的方法(就内存而言)

  12. 12

    如何将字符数组传递给字符串

  13. 13

    我如何将列表,数组或字符串作为参数传递给redshift

  14. 14

    如何将查询字符串参数传递给Laravel4中的路由

  15. 15

    如何将字符串数组传递给需要字符串但不在数组中的ruby方法?

  16. 16

    PL / SQL:将字符串的“数组”作为参数传递给sql

  17. 17

    如何将非拉丁字符串传递给Django中的url参数?

  18. 18

    如何将字符串参数传递给jQuery

  19. 19

    如何将MVC DropDownList的字符串值作为参数传递给控制器中的方法?

  20. 20

    BASH:如何将数组中的字符串作为参数传递给命令?

  21. 21

    如何将动态范围字符串文本传递给EXCEL VBA中的SQL查询IN子句

  22. 22

    如何将字符串(varchar)传递到SQL存储过程中?

  23. 23

    如何将字符串变量传递给动态sql中的where子句

  24. 24

    如何将字符串作为参数传递给需要R中的变量的函数

  25. 25

    如何将参数传递给数组中的函数?

  26. 26

    如何将字符串数组传递给函数?

  27. 27

    将 Oracle 参数传递给 SQL 字符串

  28. 28

    如何将字符串数组传递给 C 中的另一个函数

  29. 29

    如何将文件数组以及java脚本中的其他字符串/int变量传递给php

热门标签

归档