gpt4 book ai didi

c# - 将数据集写入 SQL 表

转载 作者:数据小太阳 更新时间:2023-10-29 01:54:46 25 4
gpt4 key购买 nike

我已将一个复杂的 XML 文件转换为一个包含 7 个表和大约 70 个列的数据集如何轻松地将我的数据集写入 SQL 表?

最佳答案

根据数据集中的行数,最好的做法可能是使用 SqlCommandBuilder,如下所示:

var connection = new SqlConnection("my connection string");
connection.Open();

// repeat for each table in data set
var adapterForTable1 = new SqlDataAdapter("select * from table1", connection);
var builderForTable1 = new SqlCommandBuilder(adapterForTable1);
adapterForTable1.Update(myDataSet, "Table1");

如果您在数据集中的表之间定义了复杂的关系,恐怕您不能使用 SqlCommandBuilder。相反,您需要为 DataSet 中的每个表定义一个数据适配器。然后,按依赖关系顺序更新 DataSet 中的表(即,首先执行没有依赖关系的表,然后是依赖表)。

这是一个父/子插入的示例(请注意,您会为更新做类似的事情)。 Table1 是父表,具有 ParentId(标识列)和一个 NVARCHAR 字段 ParentValue。 Table2 是 child ,有自己的标识列 (ChildId)、外键字段 (ParentId) 和自己的值 (ChildValue)。

var myDataSet = new DataSet();

// ** details of populating the dataset omitted **

// create a foreign key relationship between Table1 and Table2.
// add a constraint to Table2's ParentId column, indicating it must
// existing in Table1.
var fk = new ForeignKeyConstraint("fk", myDataSet.Tables["Table1"].Columns["ParentId"], myDataSet.Tables["Table2"].Columns["ParentId"])
{
DeleteRule = Rule.Cascade,
UpdateRule = Rule.Cascade
};
myDataSet.Tables["Table2"].Constraints.Add(fk);
myDataSet.EnforceConstraints = true;

var connection = new SqlConnection("my connection string");
var adapterForTable1 = new SqlDataAdapter();
adapterForTable1.InsertCommand =
new SqlCommand("INSERT INTO MasterTable (ParentValue) VALUES (@ParentValue); SELECT SCOPE_IDENTITY() AS ParentId", connection);
adapterForTable1.InsertCommand.Parameters.Add("@ParentValue", SqlDbType.NVarChar).SourceColumn = "ParentValue";
var adapterForTable2 = new SqlDataAdapter();
adapterForTable2.InsertCommand =
new SqlCommand("INSERT INTO ChildTable (ParentId, ChildValue) VALUES (@ParentId, @ChildValue); SELECT SCOPE_IDENTITY() AS ChildId", connection);
adapterForTable2.InsertCommand.Parameters.Add("@ParentId", SqlDbType.Int).SourceColumn = "ParentId";
adapterForTable2.InsertCommand.Parameters.Add("@ChildValue", SqlDbType.NVarChar).SourceColumn = "ChildValue";

connection.Open();
adapterForTable1.Update(myDataSet, "Table1"); // insert rows in parent first
adapterForTable2.Update(myDataSet, "Table2"); // child second

关于c# - 将数据集写入 SQL 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/549200/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com