C# 如何创建数据表并传入信息?
我想在一个SQL表中插入1000多行数据,所以我需要使用SqlBulkCopy。然而,我似乎需要先创建一个数据表。因此,如何向DataTable添加数据?我想将字典中动态生成的数据添加到DataTable中C# 如何创建数据表并传入信息?,c#,sql,sql-server,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 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;
将适当的列添加到
数据表
,然后循环所有字典条目并添加行:
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
之外,您还可以使用以下方法使用此较长但可读的方法:
最后,您需要使用:
如果
数据表中的列顺序与数据库中的列顺序相同,则无需映射列。将适当的列添加到数据表中,然后循环所有字典条目并添加行:
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);
}
using (var bulkCopy = new SqlBulkCopy(conn, <SqlBulkCopyOptions>))
{
//dataTable definition
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));
//bulkCopy options
bulkCopy.BatchSize = webidsAndXPaths.Count();
bulkCopy.DestinationTableName = "CorporateDataStructure.dbo.ObjectInventory";
//bulkCopy mappings (not mandatory, just to avoid depending on column ordering in datatable)
//That may avoid "strange" mistakes if you change something to your db or datatable.
bulkCopy.ColumnMappings.Add("object_name", "object_name");
bulkCopy.ColumnMappings.Add("object_id", "object_id");
bulkCopy.ColumnMappings.Add("object_xpath", "object_xpath");
bulkCopy.ColumnMappings.Add("time", "time");
//dataTable fedding from dictionary
foreach (var pair in webidsAndXPaths)
{
table.Rows.Add(objectName, pair.Key, pair.Value, dt);
}
//write to db.
bulkCopy.WriteToServer(table);
}
除了table.Rows.Add
之外,您还可以使用以下方法使用此较长但可读的方法:
最后,您需要使用:
如果数据表中的列顺序与数据库中的列顺序相同,则无需映射列。使用(var bulkCopy=new SqlBulkCopy(conn,)
using (var bulkCopy = new SqlBulkCopy(conn, <SqlBulkCopyOptions>))
{
//dataTable definition
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));
//bulkCopy options
bulkCopy.BatchSize = webidsAndXPaths.Count();
bulkCopy.DestinationTableName = "CorporateDataStructure.dbo.ObjectInventory";
//bulkCopy mappings (not mandatory, just to avoid depending on column ordering in datatable)
//That may avoid "strange" mistakes if you change something to your db or datatable.
bulkCopy.ColumnMappings.Add("object_name", "object_name");
bulkCopy.ColumnMappings.Add("object_id", "object_id");
bulkCopy.ColumnMappings.Add("object_xpath", "object_xpath");
bulkCopy.ColumnMappings.Add("time", "time");
//dataTable fedding from dictionary
foreach (var pair in webidsAndXPaths)
{
table.Rows.Add(objectName, pair.Key, pair.Value, dt);
}
//write to db.
bulkCopy.WriteToServer(table);
}
{
//数据表定义
var table=new System.Data.DataTable();
table.Columns.Add(“object_name”,typeof(string));
表.Columns.Add(“object_id”,typeof(int));
table.Columns.Add(“object_xpath”,typeof(string));
表.列.添加(“时间”,类型(日期时间));
//批量复制选项
bulkCopy.BatchSize=webidsAndXPaths.Count();
bulkCopy.DestinationTableName=“CorporateDataStructure.dbo.ObjectInventory”;
//bulkCopy映射(不是强制性的,只是为了避免依赖于datatable中的列顺序)
//如果您对db或datatable做了一些更改,这可能会避免“奇怪”的错误。
添加(“对象名称”、“对象名称”);
bulkCopy.ColumnMappings.Add(“object_id”,“object_id”);
添加(“object_xpath”,“object_xpath”);
bulkCopy.ColumnMappings.Add(“time”,“time”);
//从字典中查找数据表
foreach(webidsAndXPaths中的变量对)
{
table.Rows.Add(objectName、pair.Key、pair.Value、dt);
}
//写入数据库。
bulkCopy.WriteToServer(表);
}
使用(var bulkCopy=new SqlBulkCopy(conn,))
{
//数据表定义
var table=new System.Data.DataTable();
table.Columns.Add(“object_name”,typeof(string));
表.Columns.Add(“object_id”,typeof(int));
table.Columns.Add(“object_xpath”,typeof(string));
表.列.添加(“时间”,类型(日期时间));
//批量复制选项
bulkCopy.BatchSize=webidsAndXPaths.Count();
bulkCopy.DestinationTableName=“CorporateDataStructure.dbo.ObjectInventory”;
//bulkCopy映射(不是强制性的,只是为了避免依赖于datatable中的列顺序)
//如果您对db或datatable做了一些更改,这可能会避免“奇怪”的错误。
添加(“对象名称”、“对象名称”);
bulkCopy.ColumnMappings.Add(“object_id”,“object_id”);
添加(“object_xpath”,“object_xpath”);
bulkCopy.ColumnMappings.Add(“time”,“time”);
//从字典中查找数据表
foreach(webidsAndXPaths中的变量对)
{
table.Rows.Add(objectName、pair.Key、pair.Value、dt);
}
//写入数据库。
bulkCopy.WriteToServer(表);
}
您也可以使用IDataReader
,例如,从您拥有的SELECT
语句(使用sqlCmd.ExecuteReader()
您可以为SqlBulkCopy
获得这样的IDataReader
),您也可以使用IDataReader
,例如从您拥有的SELECT
语句(使用sqlCmd.ExecuteReader()
可以为SqlBulkCopy
获得这样的IDataReader
)