使用插入SQL(C#,SQL)的Foreach

使用插入SQL(C#,SQL)的Foreach,c#,sql,visual-studio,insert,C#,Sql,Visual Studio,Insert,我有一份价值清单: string[] DataValues 现在我想将所有值放入insert: string myInsert = "Insert into table1(col1, col2, col3....col4) values (DataValues[0],DataValues [1], DataValues[2]....) 可以使用foreach?来获得您想要的数据,您可以将数据值格式化为: var paramList = string.Join(",",DataValues.S

我有一份价值清单:

string[] DataValues
现在我想将所有值放入insert:

string myInsert = "Insert into table1(col1, col2, col3....col4) values (DataValues[0],DataValues [1], DataValues[2]....)

可以使用foreach?

来获得您想要的数据,您可以将数据值格式化为:

var paramList = string.Join(",",DataValues.Select(x=>string.Format("'{0}'",x)).ToArray()
我想你们也有相同的列列表

但不要这样做

这将使您的代码易于sql注入。您应该为每个值声明参数,并通过参数使用它

var parameters = string.Join(",",DataValues.Select((x,i)=>"@param"+i));
var myInsert = string.Format("Insert into table1({0}) values ({1})", columns, parameters);

using (SqlConnection connection = new SqlConnection(/* connection info */))
using (SqlCommand command = new SqlCommand(sql, connection))
{
    for(var i=0; i< DataValues.Length ; i++)
    {
       var param = cmd.Parameters.Add("@param"+i,  SqlDbType.NVarChar, DataValues[i].Length);
       param.Value = DataValues[i];
    }
    command.ExecuteNonQuery();
}
var参数=string.Join(“,”,DataValues.Select((x,i)=>“@param”+i));
var myInsert=string.Format(“插入到表1({0})值({1})”,列,参数);
使用(SqlConnection连接=新的SqlConnection(/*连接信息*/))
使用(SqlCommand=newsqlcommand(sql,连接))
{
对于(var i=0;i
要获得您想要的数据,您可以将数据值格式化如下:

var paramList = string.Join(",",DataValues.Select(x=>string.Format("'{0}'",x)).ToArray()
我想你们也有相同的列列表

但不要这样做

这将使您的代码易于sql注入。您应该为每个值声明参数,并通过参数使用它

var parameters = string.Join(",",DataValues.Select((x,i)=>"@param"+i));
var myInsert = string.Format("Insert into table1({0}) values ({1})", columns, parameters);

using (SqlConnection connection = new SqlConnection(/* connection info */))
using (SqlCommand command = new SqlCommand(sql, connection))
{
    for(var i=0; i< DataValues.Length ; i++)
    {
       var param = cmd.Parameters.Add("@param"+i,  SqlDbType.NVarChar, DataValues[i].Length);
       param.Value = DataValues[i];
    }
    command.ExecuteNonQuery();
}
var参数=string.Join(“,”,DataValues.Select((x,i)=>“@param”+i));
var myInsert=string.Format(“插入到表1({0})值({1})”,列,参数);
使用(SqlConnection连接=新的SqlConnection(/*连接信息*/))
使用(SqlCommand=newsqlcommand(sql,连接))
{
对于(var i=0;i
@MohammedNoureldin在代码方面甚至没有太大的区别,因为您可以轻松地将带有
for
循环的代码转换为带有
foreach
循环的代码,或者反过来转换为.foreach(数据值中的字符串s){//insert s into database;}如果您正在创建这样的SQL,为什么不直接使用该方法呢,您将向SQL注入和bug敞开大门。请非常小心…@MohammedNoureldin在代码中甚至没有那么大的区别,因为您可以轻松地将带有
for
循环的代码转换为带有
foreach
循环的代码,或者反过来转换为.foreach(数据值中的字符串s){//insert s-to-database;}如果您正在创建这样的SQL,为什么不直接使用该方法呢,您将向SQL注入和bug敞开大门。请非常小心…@DavidG yes ok,fixed.thx Rafal,insert命令将保存在file.sql中,因此我可以轻松地写入“myInsert”file@DavidG是的,好的,fixed.thx Rafal,insert命令将保存在file.sql中,所以我可以轻松地将“myInsert”写入文件