繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM