C#学习教程:HowtopassanarrayofstringsinaSQLparametertoanINclauseinSQL方式逻辑。我只需要在存储过程中执行此查询:从tbl_SizeBreakup中选择Sizes、SUM(Quantity)where(Brand=@brand)and(Comboin('1','2'))...我必须做的组合C#使用SQL参数传递DataSetdt=newDataSet();cmd=newSqlCommand();cmd.CommandType=System.Data.CommandType.StoredProcedure;cmd.CommandText="sp_Accessories";cmd.Connection=con;命令。参数。AddRange(newSqlParameter[]{newSqlParameter("@Mode",mode),newSqlParameter("@Combo",combo),}}所以如果我传递1个参数,按预期工作。我应该传递的组合是一个字符串[](字符串数组)数组长度取决于用户在UI中选择的内容。我的问题是,如何将string[]传递给newSqlParameter("@Combo",combo)?我的存储过程..ALTERproc[dbo].[sp_Accessories](@Modevarchar(50)=null,@idint=null,@brandvarchar(50)=null,@departmentvarchar(MAX)=null,@seasonvarchar(50)=null,@groupnamevarchar(MAX)=null,@stylesvarchar(50)=null,@combovarchar(50)=null,@combo_colornvarchar(max)=null,)就好像@Mode='getsizewise'beginselectSizes,SUM(Quantity)fromtbl_SizeBreakup其中(Brand=@brand)and(Department=@department)and(Season=@season)and(Group_Name=@groupname)and(Style=@styles)and(Combo_Color=@color)and(Total_Add_Qty='TotalQuantity')GroupBySizesendIntroduction:虽然OP已经接受了答案,但我认为分享我的经验会更好,因为我相信我要展示的方法更好比接受的更好。我发现将数组传递给sqlserver数据库的最佳方法是将用户定义的表类型与c#DataTable一起使用。在你的例子中,因为你想传递一个字符串的维数组,所以很容易:首先,你需要在你的数据库中创建一个用户定义的表类型:CREATETYPEdbo.StringArrayAsTable(StringItemvarchar(50)--你可以使用适合您需要的任何长度)然后您需要在c#代码中创建一个数据表:DataTabledt=newDataTable();dt.Columns.Add("StringItem",typeof(System.String));然后更改存储过程以接受此数据类型作为参数:ALTERproc[dbo].[sp_Accessories](@Modevarchar(50)=null,@idint=null,@brandvarchar(50)=null,@departmentvarchar(MAX)=null,@seasonvarchar(50)=null,@groupnamevarchar(MAX)=null,@stylesvarchar(50)=null,@combodbo.StringArrayReadonly=null,——注意这个变化@combo_colornvarchar(max)=null,)就好像@Mode='getsizewise'开始从tbl_SizeBreakup选择Sizes,SUM(Quantity)where(Brand=@brand)and(Department=@department)and(Season=@season)and(Group_Name=@groupname)and(Style=@styles)and(Combo_Color=@color)and(Total_Add_Qty='TotalQuantity')andcomboColumnin(selectStringItemfrom@Combo)--注意这个改变按尺寸分组然后结束,您需要在c#代码中将字符串数组转换为数据表foreach(stringsinYourStringArray){string[]temp={s};dt.Rows.Add(温度);}将DataTable作为参数添加到存储过程:System.Data.SqlClient.SqlParametersp=newData.SqlClient.SqlParameter();sp.SqlDbType=SqlDbType.Structured;sp.Value=dt;sp.ParameterName="@Combo";cmd.Parameters.Add(sp);构建并运行。这种方法应该比使用也可用于不同数据类型的sql用户定义函数具有更好的性能。这是使用它的最佳理由之一:考虑一个需要传递日期数组的场景:csv方法需要sql将每个字符串转换为日期,而使用这种方法您可以简单地按日期传递日期,而不是它们被转换为字符串,然后转换为日期。此外,您还可以传递二维数组或字典,只需在sql数据库中创建适当的用户定义数据类型即可。注意:这里直接写的代码可能会有一些错别字。你可以在csv中传递一个列表(逗号分隔值):'1,2,3',这个字符串在SP中是没有用的,但是你可以转换为一个表,首先创建这个函数:CREATEFUNCTIONfun_CSV_to_Table(@pcsvListvarchar(max))RETURNS@tableWithValuestable(theColumnvarchar(100))ASBEGINDECLARE@posINTWHILECHARINDEX(',',@pcsvList)>0BEGINSELECT@pos=CHARINDEX(',',@pcsvList)INSERTINTO@tableWithValuesSELECTLTRIM(RTRIM(SUBSTRING(@pcsvList,1,@pos-1)))SELECT@pcsvList=SUBSTRING(@pcsvList,@pos+1,LEN(@pcsvList)-@pos)END--插入最后一个值。INSERTINTO@tableWithValuesSELECT@pcsvListRETURNENDGO然后就可以使用了:SELECTSIZES,SUM(QUANTITY)FROMTBL_SIZEBREAKUPWHEREBRAND=@BRANDANDCOMBOIN(selecttheColumnFROMdbo.fun_CSV_to_Table(@aList))/*@aList必须是csv:'1,2,3,...,n'*/你应该关心空格。可以使用Parameters.AddWithValues(已更新):以上是C#学习教程:如何将SQL参数中的字符串数组传递给SQL中的IN子句全文分享,如果对大家有用需要了解更多关于C#学习教程,希望大家多多关注——DataSetdt=newDataSet();cmd=newSqlCommand();cmd.CommandType=System.Data.CommandType.StoredProcedure;cmd.CommandText="sp_Accessories";cmd.Connection=con;varparameterList=newStringBuilder();for(inti=0;i本文收集自网络,不代表立场,如涉及侵权,请点右联系管理员删除,如需转载请注明出处: