我有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]
答案 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));