c# - 如何创建数据表并传入信息?

标签 c# sql sql-server

我想往一个SQL表中插入超过1000行的数据,所以我需要用到SqlBulkCopy。但是看来我需要先创建一个数据表。那么,如何向DataTable中添加数据呢?我想将字典中动态生成的数据添加到 DataTable 中。

var conn = new SqlConnection(masterData.DictRunData["ConnectionStringLocalDb"]);
const string objectName = "NotAvailable";
var dt = DateTime.Now;
var cmd = new SqlCommand("insert into CorporateDataStructure.dbo.ObjectInventory (location, object_name, object_id, object_xpath, time) values (@location, @object_name, @object_id, @object_xpath, @time)", conn);

foreach (var pair in webidsAndXPaths)
{
    conn.Open();
    cmd.Parameters.Clear();
    cmd.Parameters.Add(new SqlParameter("@object_name", objectName));
    cmd.Parameters.Add(new SqlParameter("@object_id", pair.Key));
    cmd.Parameters.Add(new SqlParameter("@object_xpath", pair.Value));
    cmd.Parameters.Add(new SqlParameter("@time", dt));

    cmd.ExecuteNonQuery();
    conn.Close();
}
return true;    

最佳答案

将适当的列添加到 DataTable,然后循环所有字典条目并添加行:

var table = new System.Data.DataTable();
table.Columns.Add("object_name", typeof(string));
table.Columns.Add("object_id", typeof(int));
table.Columns.Add("object_xpath", typeof(string));
table.Columns.Add("time", typeof(DateTime));

foreach (var pair in webidsAndXPaths)
{
    table.Rows.Add(objectName, pair.Key, pair.Value, dt);
}

除了 table.Rows.Add,您还可以使用 SetField 来使用这种更长但可读的方法:

foreach (var pair in webidsAndXPaths)
{
    DataRow row = table.Rows.Add();
    row.SetField("object_name", objectName);
    row.SetField("object_id", pair.Key);
    row.SetField("object_xpath", pair.Value);
    row.SetField("time", dt);
}

最后你需要使用 SqlBulkCopy.WriteToServer :

using (SqlBulkCopy bulkCopy = new SqlBulkCopy(conn))
{
    conn.Open();
    bulkCopy.DestinationTableName = "dbo.ObjectInventory";
    bulkCopy.WriteToServer(table);
}

如果 DataTable 中的列顺序与数据库中的顺序相同,则不需要映射列。

关于c# - 如何创建数据表并传入信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23522012/

相关文章:

sql-server - 是否可以从 INFORMATION_SCHEMA 获取表类型定义?

c# - 从跨源 http.get 请求的 ASP.NET Web API 2 响应中获取 Angular 中的特定响应 header (例如,Content-Disposition)

mysql - Order by 使 mysql 变慢

PHP/CSS - 检测 nl2br 中断

sql - Postgresql - 列数未知的数据透视表

sql-server - 在 DTS 包中查找对表的引用

sql-server - 将 float 转换为十进制 (SQL Server)

c# - 如何使用正则表达式验证带有空格的逗号分隔字符串

c# - 我如何重现这种 3D 效果

c# - 使用 MVVMLight 的 WPF UserControl 找不到 ViewModelLocator