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

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;

我想在一个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;    

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

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