[英]How to Insert whole DataTable into Sql table At once in C#
我有具有相同Formate的excel工作表(命名为$ Sheet1)和sql表(命名为Users ),如下所示
ID | UserName | FirstName | LastName | DateOfBirth |
1 | robert | robert | poinan | 1984 |
2 | joy | joy | rob | 1990 |
我已经读取了DataSet中的整个Excel工作表数据(命名为“ ds ”),现在我想将整个DataSet(即“ ds ”)插入sql表(即“ Users ”)
我正在使用for循环(也可以使用foreach循环)将' ds '(DataSet)行一一插入到Users (Sql table)表中
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表中的数据行,则需要花费很多时间来执行整个过程。
我的问题是。 有没有办法将整个“ DataTable(位于DataSet中)一次性插入到用户表中
像这样
INSERT INTO [Users](ID, FirstName,LastName,DateOfBirth)
SELECT ID, FirstName,LastName,DateOfBirth FROM ds.Tables[0]
;
这是MSDN( https://msdn.microsoft.com/zh-cn/library/ex21zs8x ( v=vs.110 ) .aspx )中提供的方法。 进行DT并将DT作为参数传递给BulkCopy。
DataTable dt = new DataTable();
dt.Columns.Add("FieldName", typeof(System.Decimal));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.