Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SQL从XXX中选择*其中列名位于数组中_C#_Sql_Arrays - Fatal编程技术网

C# SQL从XXX中选择*其中列名位于数组中

C# SQL从XXX中选择*其中列名位于数组中,c#,sql,arrays,C#,Sql,Arrays,我正在编写一些SQL代码 我熟悉语法 SELECT * FROM myTable WHERE myColumn in ('1','2','3'); 假设我正在编写一些C代码,其中我想使用一个C数组,其中我使用了'1','2','3'。我该怎么做呢?我会通过一个for循环,并按照您想要的方式格式化它。例如,假设您有一个数组:6,3,abc。使用for循环将其添加到常规字符串中,结果为:6,3,abc;不难,只需将其插入语句。SQL不支持通过IN子句为逗号分隔的值列表使用单个变量,因此这意味着您的

我正在编写一些SQL代码

我熟悉语法

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

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

我会通过一个for循环,并按照您想要的方式格式化它。例如,假设您有一个数组:6,3,abc。使用for循环将其添加到常规字符串中,结果为:6,3,abc;不难,只需将其插入语句。

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


否则,您需要考虑使用数据库的本机动态SQL语法-但这仍然意味着您必须将C数组转换为SQL才能进行操作…

您可以动态构建SQL字符串

如果您知道数组中的数据是好的,而不是由用户提供的,那么只需执行string.Join即可

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();
您只需执行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();

您正在使用LINQtoSQL吗?如果不是,您使用什么来访问数据?myColumn是字符串还是整数数据?如果是整数,您应该在1,2,3中使用tsql:myColumn是的Donnie,您对主流sql引擎的看法是正确的-我习惯于通过ODBC连接查询Infomix SE数据库,这种语法是可以接受的。请检查以下答案,以获得比此答案更好的扩展方法。