【问题标题】:Foreach with Insert SQL (C#, SQL)带插入 SQL 的 Foreach(C#、SQL)
【发布时间】:2017-12-18 12:59:20
【问题描述】:

我有值列表:

string[] DataValues

现在我想将所有值放入插入:

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

有可能以某种方式使用foreach吗?

【问题讨论】:

  • @MohammedNoureldin 甚至不会对代码产生如此大的影响,因为您可以轻松地将带有 for 循环的代码转换为带有 foreach 循环的代码,或者反过来。
  • foreach (string s in DataValues) { //insert s into database; }
  • 为什么不直接使用String.Join 方法
  • 如果您像这样创建 SQL,您将面临 SQL 注入和错误。请小心...

标签: c# sql visual-studio insert


【解决方案1】:

为了得到你想要的,你可以像这样格式化你的 DataValues:

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();
}

【讨论】:

  • @DavidG 是的,好的,已修复。
  • thx Rafal,插入命令将保存在 file.sql 中,所以“myInsert”我可以轻松写入文件
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-03
相关资源
最近更新 更多