我正在使用存储过程-如何传递类似以下的字符串:
'White','Black','Green'
我正在尝试执行以下过程:
var data = new List<dynamic>();
string colorstr = "'White','Black','Green'";
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
string sql = $"exec GetData '{colorstr }'";
data = connection.Query(sql).AsList();
connection.Close();
}
这给出了一个错误:
'White'附近的语法不正确
所以问题是如何将带单引号的逗号分隔字符串传递给存储过程?
答案 0 :(得分:3)
您正在创建SQL注入问题。而是使用如下的SQL命令。您避免了该问题和SQL注入
using (SqlCommand cmd = new SqlCommand("connectionString", con)) {
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@colorstr", SqlDbType.VarChar).Value = "'White','Black','Green'";
con.Open();
cmd.ExecuteNonQuery();
}
我不知道您的参数名称,因此我使用了colorstr
和参数类型,所以我使用了SqlDbType.VarChar
。在数据库中检查并修复。
答案 1 :(得分:0)
您实际上正在寻找如何将数组作为参数传递给存储过程。 SQL Server不明确支持将数组作为参数,但是有一些方法可以使它使用XML或使用List变量类型来工作。
有关更多信息,请参见:How to pass an array into a SQL Server stored procedure