c# - 如何在 C# 中从 Datatable 动态构建插入命令

标签 c# ado.net dynamic-sql

我在从 c# 中的 dataTable 对象动态创建 SQL 插入语句时遇到了一些问题。我想知道实现它的最佳实践。这是我的代码片段,到目前为止我已经尝试过了。

 String sqlCommandInsert = "INSERT INTO dbo.RAW_DATA(";
 String sqlCommandValue = "";
 foreach (DataColumn dataColumn in dataTable.Columns)
 {
     sqlCommandInsert += dataColumn + ",";
 }
 sqlCommandInsert += sqlCommandInsert.TrimEnd(',');

 sqlCommandInsert += ") VALUE(";

 for (int i = 0; i < dataTable.Rows.Count; i++)
 {
     sqlCommandValue += "'" + dataTable.Rows[i].ItemArray[i] + "',";
 }

 var insertCommand = sqlCommandInsert;
 sqlCommandValue = sqlCommandValue.TrimEnd(',');

 var command = insertCommand + sqlCommandValue + ")";
 dataContext.Database.ExecuteSqlCommand(command); 

任何建议将不胜感激:) 问候。

最佳答案

使用 VALUES 而不是 VALUE。除此之外,您应该始终使用 sql 参数:

string columns = string.Join("," 
    , dataTable.Columns.Cast<DataColumn>().Select(c => c.ColumnName));
string values = string.Join("," 
    , dataTable.Columns.Cast<DataColumn>().Select(c => string.Format("@{0}", c.ColumnName)));
String sqlCommandInsert = string.Format("INSERT INTO dbo.RAW_DATA({0}) VALUES ({1})" , columns, values);

using(var con = new SqlConnection("ConnectionString"))
using (var cmd = new SqlCommand(sqlCommandInsert, con))
{
    con.Open();
    foreach (DataRow row in dataTable.Rows)
    {
        cmd.Parameters.Clear();
        foreach (DataColumn col in dataTable.Columns)
            cmd.Parameters.AddWithValue("@" + col.ColumnName, row[col]);
        int inserted = cmd.ExecuteNonQuery();
    }
}

关于c# - 如何在 C# 中从 Datatable 动态构建插入命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21857368/

相关文章:

c# - CS5001 : exe does not contain a static 'Main' method suitable for an entry point

vb.net - 在 VB 中使用 Excel 数据填充 DataGrid 列

c# - 使用语句似乎没有处理我的对象

sql-server - Yii:对动态列进行排序和格式化

sql-server - 在动态 SQL 中使用 OUTPUT 参数调用存储过程

postgresql - 具有动态列名的 Postgres 选择

c# - 我怎样才能在 gridview 中获取超链接的值(value)?

c# - LINQ TO SQL 我在这里遗漏了一些明显的东西吗?

c# - MOSS 2007 在 XP 机器上使用 C# 导出文档

c# - SQL连接为什么会留下参数?