C# - 将DataSet插入SQL表

时间:2011-04-13 15:21:25

标签: c# xml dataset

我有一个DataSet,我用XML文件中的值填充。我想将值插入到SQL表中。我该怎么做?

以下是我填充数据集的方法:

        DataSet dataset = new DataSet();

        dataset.ReadXml(xmlfile);
        customer.DataSource = dataset.Tables[0];

5 个答案:

答案 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对象具有正确的名称和类型以及SizeAllowDbNull的正确值,并且没有涉及外键关系,并且您不会遇到表中现有数据的重复主键,上述情况应该有效。

答案 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与您的架构不同,那么您最有可能需要循环并填充特定于架构的数据集,然后根据需要进行保存。