我有一个DataSet,我用XML文件中的值填充。我想将值插入到SQL表中。我该怎么做?
以下是我填充数据集的方法:
DataSet dataset = new DataSet();
dataset.ReadXml(xmlfile);
customer.DataSource = dataset.Tables[0];
答案 0 :(得分:2)
如果您要做的就是插入,那么最简单的方法就是遍历DataTable
中的行,并为每一行创建并执行DbCommand
。要使用的具体语法取决于您正在使用的数据库类型;对于SQL Server,它可能如下所示:
string sql = "INSERT INTO T (A, B, C) VALUES (@A, @B, @C)";
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
foreach (DataRow r in myTable.Rows)
{
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = sql;
cmd.Parameters.AddWithValue("@A", r["A"]);
cmd.Parameters.AddWithValue("@B", r["B"]);
cmd.Parameters.AddWithValue("@C", r["C"]);
cmd.ExecuteNonQuery();
}
}
这掩盖了许多可能的复杂因素,例如:异常处理,使用错误的DataRowState
过滤掉行,在AcceptChanges
上调用DataRow
,使用数据库分配的值更新标识列,依此类推。在ADO.NET中有很多东西需要理解,而那些东西在那里是有原因的。但是,如果您要做的只是插入行,DataColumn
中的DataTable
对象具有正确的名称和类型以及Size
和AllowDbNull
的正确值,并且没有涉及外键关系,并且您不会遇到表中现有数据的重复主键,上述情况应该有效。
答案 1 :(得分:0)
我的建议是为insert创建一个存储过程,然后创建一个遍历数据集的方法,并设置存储过程的参数然后执行它。
答案 2 :(得分:0)
我认为您需要遍历数据集并执行插入操作。
你可以使用sproc显然做到这一点,你只需传递参数,或者使用LINQ。
无论哪种方式都应该有效。
答案 3 :(得分:0)
这完全取决于您现有的数据访问层。
如果一个不存在,我会更多地使用LinqtoSQL而不是使用存储过程,存储过程更难以管理
答案 4 :(得分:-1)
简单,
只需使用DataSet.ReadXml()方法。
http://msdn.microsoft.com/en-us/library/system.data.dataset.readxml.aspx
现在,如果您的xml与您的架构不同,那么您最有可能需要循环并填充特定于架构的数据集,然后根据需要进行保存。