我想往一个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/