2011-04-13 78 views
0

我有一个DataSet,我用XML文件中的值填充。我想将值插入到SQL表中。我怎么做?C# - 将数据集插入SQL表

这是我如何填写我的数据集:

 DataSet dataset = new DataSet(); 

     dataset.ReadXml(xmlfile); 
     customer.DataSource = dataset.Tables[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,在DataRow上调用AcceptChanges,使用数据库分配的值更新标识列,依此类推。在ADO.NET中有很多东西需要理解,而这些东西都是有原因的。但是,如果您要做的只是插入行,并且DataTable中的DataColumn对象具有SizeAllowDbNull的正确名称和类型以及适当的值,并且没有涉及外键关系,并且您不打算在表中存在重复的主键和现有数据的情况下,上面应该可以工作。

+0

Thnx非常多的人,我会尝试它tommoro。 – Erik 2011-04-13 22:28:38

0

我的建议是创建一个存储过程,你的插入,然后创建一个遍历数据集,并设置你的存储过程的参数的方法然后执行它。

0

我想你需要遍历数据集并执行插入操作。

你明显可以用sproc做这件事,而你只需传递参数或LINQ。

无论哪种方式应该工作。

+0

如何循环DataSet? – Erik 2011-04-13 15:35:11

+0

与循环遍历数据库中的行并填充它的方式相同。 – 2011-04-13 15:51:27

0

这完全取决于您现有的数据访问层。

如果一个不存在我看起来更倾向于LinqtoSQL而不是使用存储过程,存储过程是更加难以管理