如何将带单引号的字符串传递给Sql存储过程

时间:2019-04-26 07:09:34

标签: c# sql sql-server stored-procedures

我正在使用存储过程-如何传递类似以下的字符串:

'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'附近的语法不正确

所以问题是如何将带单引号的逗号分隔字符串传递给存储过程?

2 个答案:

答案 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