Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.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# 从表中选择字符串[]列数组_C#_Sql_Sql Server_Dynamic - Fatal编程技术网

C# 从表中选择字符串[]列数组

C# 从表中选择字符串[]列数组,c#,sql,sql-server,dynamic,C#,Sql,Sql Server,Dynamic,我想要实现的是,从这一点: string[] QueryString = new string[]{ "Column1", "Column2" }; 创建以下内容: SELECT Column1,Column2 FROM SomeTable 我知道我可以做一个concat,但这不是一个非常干净的方法 我知道我可以做海螺,但这不是一个很干净的方式 我觉得很干净: string sql = "SELECT " + string.Join(", ",

我想要实现的是,从这一点:

string[] QueryString = new string[]{
        "Column1",
        "Column2"
    };
创建以下内容:

SELECT  Column1,Column2
FROM    SomeTable
我知道我可以做一个
concat
,但这不是一个非常干净的方法

我知道我可以做海螺,但这不是一个很干净的方式

我觉得很干净:

string sql = "SELECT " + string.Join(", ", QueryString) + " FROM SomeTable";
尽管您容易受到SQL注入攻击:

string[] QueryString = new string[]{
        " * FROM SomeTable; DROP TABLE SomeTable; --"
    };

因此,只有在完全控制可以使用的列名(例如,从表元数据填充)的情况下才能执行此操作。

您可以使用
String.Format


尽管在构造sql查询时,始终要注意sql注入攻击。

当存在两个以上的sql查询时,这将不起作用columns@PranayRana是正确的,它是动态数组,因此标记
dynamic
:DI完全控制列名。@skmasq另外,您可能希望安全地引用标识符,例如
选择[Column1],[SomeTable]
中的[Column2],否则类似于
my column
的列名将导致错误。
Declare @qtext varchar(max) = 'select '+column1+ ' , '+column2+ ' from sometable ' 
Exec(@qtext)
String query =
String.Format("SELECT {0}, {1} FROM SomeTable", QueryString[0], QueryString[1]);