我有一个SQL查询,如下所示:
Select CatId
From tbl_T2H_Category
Where Category IN ('Category3', 'Category4', 'Category6')
现在我想要的是IN子句中的值应该从checkboxlist中动态添加。我从我的控件获取逗号分隔值并将其传递给sql查询,如下所示:
string mystring = "Category3,Category4,Category6";
cmd.commanText = "Select CatId From tbl_T2H_Category Where Category IN (" + mystring + ")";
这不是在sql端执行,因为sql只识别字符串,如果它们在“'”“”(单引号)里面。请帮我写相应的查询。
答案 0 :(得分:5)
您想使用表值参数。这里显示的MSDN文章比我更好地证明了它:
答案 1 :(得分:1)
正确的语法
string mystring = "'Category3','Category4','Category6'";
cmd.commanText = "Select CatId From tbl_T2H_Category Where Category IN (" + mystring + ")";
但请不要使用它。你可以像下面一样使用它(但不建议这样做)
cmd.commanText = "Select CatId From tbl_T2H_Category Where Category IN ('" + cat_1 + "','" + cat_2 + "','" + cat_3 + "')";
我会在下面使用这个,它很安全
string commandText = "Select CatId From tbl_T2H_Category Where Category IN (@cat_1,@cat_2 @cat_3)";
SqlCommand command = new SqlCommand(commandText, connection);
command.Parameters.Add("@cat1", SqlDbType.Varchar);
command.Parameters["@cat1"].Value = "category1";
command.Parameters.Add("@cat2", SqlDbType.Varchar);
command.Parameters["@cat2"].Value = "category2";
command.Parameters.Add("@cat3", SqlDbType.Varchar);
command.Parameters["@cat3"].Value = "category3";
这最后一个是安全的,它可以防止sql-injection
答案 2 :(得分:1)
最好使用Table-Valued Parameters处理。
您的第一步是创建类型:
CREATE TYPE dbo.StringList AS TABLE (Value NVARCHAR(MAX) NOT NULL);
您的下一步是在逗号分隔列表中使用c#创建数据表以传递给您的SqlCommand:
string mystring = "Category3,Category4,Category6";
string[] myarray = mystring.Split(",".ToCharArray());
DataTable table = new DataTable();
table.Columns.Add("Value", typeof(string));
for (int i = 0; i < myarray.Length; i++)
{
var row = table.NewRow();
row[0] = myarray[i];
table.Rows.Add(row);
}
最后,您可以将其传递给您的SqlCommand:
cmd.commanText = "Select CatId From tbl_T2H_Category Where Category IN (SELECT Value FROM @Strings)";
cmd.Parameters.Add(new SqlParameter("@Strings", SqlDbType.Structured)).Value = table;
答案 3 :(得分:0)
用单引号将每个类别换成字符串?
像
这样的东西var mystring = "'Category3','Category4','Category6'"
答案 4 :(得分:0)
使用
将逗号分隔值拆分为数组 string[] myArr = commaSepString.Split(',');
然后用逗号连接它们,用这样的逗号包围
string newString = "'"+myArr.Join("','")+"'";
答案 5 :(得分:0)
试试这个......
public String returnCategories(string categories)
{
string categoriesConc = "";
string[] split = categories.Split(',');
for (int i = 0; i < split.Length; i++)
{
if (string.IsNullOrEmpty(categoriesConc))
{
categoriesConc = split[i].ToString();
}
else
{
categoriesConc = categoriesConc + "," + split[i].ToString();
}
}
return categoriesConc;
}