如何在C#中将整个DataTable一次性插入到Sql表中

时间:2015-04-01 14:13:20

标签: c# asp.net datatable dataset sqlcommand

我有excel表格(名为$ Sheet1)和sql表格(命名为用户)与同一个Formate,如下所示

    ID | UserName | FirstName | LastName | DateOfBirth |
    1  | robert   | robert    | poinan   | 1984        |
    2  | joy      | joy       | rob      | 1990        |

我已阅读 DataSet 中的整个Excel工作表数据(命名为' ds ')现在我想插入整个DataSet(其中在sql表中是' ds ')(' 用户')

我正在使用for循环(也可以使用foreach循环)来插入' ds ' (DataSet)逐行进入用户(Sql表)表

sqlConn.Open();
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                {
SqlCommand cmd = new SqlCommand("INSERT INTO [Users] ([ID],[UserName],[FirstName],[LastName],[DateOfBirth]) VALUES(@ID,@UserName,@FirstName,@LastName,@DateOfBirth))", sqlConn); 

cmd.Parameters.AddWithValue("@ID", ds.Tables[0].Rows[i][0].ToString());
cmd.Parameters.AddWithValue("@UserName", ds.Tables[0].Rows[i][1].ToString());
cmd.Parameters.AddWithValue("@FirstName", ds.Tables[0].Rows[i][2].ToString());
cmd.Parameters.AddWithValue("@LastName", ds.Tables[0].Rows[i][3].ToString());
cmd.Parameters.AddWithValue("@DateOfBirth", ds.Tables[0].Rows[i][4].ToString());
cmd.ExecuteNonQuery();
                    }
                }
                sqlConn.Close();

在这段代码中我遇到了很多问题,其中一个问题是,如果在插入行时出现任何错误,程序会停止,但是下次插入的行在我尝试运行时会出现在sql数据库中这个程序数据行是重复的。 我有数百万条记录。如果我想检查sql表中的数据行,则需要花费大量时间来执行整个过程。

我的疑惑是。有没有办法插入整个&#39; DataTable(在DataSet中)&#39;一次进入用户

像这样的东西

INSERT INTO [Users](ID, FirstName,LastName,DateOfBirth) 
SELECT ID, FirstName,LastName,DateOfBirth FROM ds.Tables[0]

1 个答案:

答案 0 :(得分:0)

这是MSDN(https://msdn.microsoft.com/en-us/library/ex21zs8x(v=vs.110).aspx)中给出的方法。创建一个DT并将DT作为参数传递给BulkCopy。

DataTable dt = new DataTable();
dt.Columns.Add("FieldName", typeof(System.Decimal));