SQL SELECT * FROM XXX WHERE列中的columnName

时间:2010-12-09 00:54:21

标签: c# sql arrays

我正在研究一些SQL代码。

我熟悉语法

SELECT * FROM myTable WHERE myColumn in ('1','2','3');

假设我正在编写一些C#代码,我想在其中使用('1','2','3')的C#数组。我该怎么做?

4 个答案:

答案 0 :(得分:9)

您可以动态构建SQL字符串。

如果你知道数组中的数据是好的(不是由用户提供),你可以只做一个字符串。加入。

var sql = string.Format("SELECT * FROM myTable WHERE myColumn in ({0})", string.Join(", ", myArray));

如果您不知道它是已清理的数据,那么您应该使用带参数的命令。

var myArray = new string[] { "1", "2", "3" };
//var sql = string.Format("SELECT * FROM myTable WHERE myColumn in ({0})", string.Join(", ", myArray));

var cmd = new System.Data.SqlClient.SqlCommand();
var sql = new System.Text.StringBuilder();
sql.Append("SELECT * FROM myTable WHERE myColumn in (");
for (var i = 0; i < myArray.Length; i++)
{
    cmd.Parameters.Add("@" + i, myArray[i]);
    if (i > 0) sql.Append(", ");
    sql.Append("@" + i);
}
sql.Append(")");
cmd.CommandText = sql.ToString();

答案 1 :(得分:2)

SQL不支持通过IN子句将单个变量用于逗号分隔的值列表,这意味着您的C#代码必须将数组转换为逗号分隔列表。然后在执行查询之前将该列表连接到查询中。

否则,您需要查看使用数据库的本机动态SQL语法 - 但这仍然意味着您必须将C#数组转换为SQL才能被操作...

答案 2 :(得分:0)

我会经历一个for循环并按照你想要的方式格式化它。例如,假设您有一个数组:6,3,abc。使用for循环将其添加到一般字符串中,结果为:(6,3,abc);不难,然后将其插入到声明中。

答案 3 :(得分:-1)

您只需要执行string.Join将数组创建为一个字符串,您可以将该字符串作为参数传递给查询。

例如:

var values = new string[] { "1", "2", "3" };
var parameterString = string.Join(",", values);

var sql = "SELECT * FROM myTable WHERE myColumn in (@param)";

var cmd = new SqlCommand(sql, connectionstring);
cmd.Parameters.AddWithValue("@param", parameterString);
var reader = cmd.ExecuteReader();