C#Datatable导入sqlserver数据库中,三种常见,快捷的方法

1,最常见的Executenonquery(返回影响的行数)sql是我的查询插入语句,你可以换成你的!这种方式入库,速度一般,大量数据时不提倡使用

 1         /// <summary>
 2         /// 通过table一个一个的插入
 3         /// </summary>
 4         /// <param name="table"></param>
 5         public static void Executenonquery(DataTable table)
 6         {
 7             foreach (DataRow itemRow in table.Rows)
 8             {
 9                 //if exists(select * from dbo.ID where ENG = '')
10                 //   begin
11                 //        return;
12                 //                end
13                 //else
14                 //   begin
15                 //        INSERT INTO ID([ENG],[GB],[B5],[FILE],[MSG]) values('', '', '', '', '')
16                 //   end
17                 string sql = "if exists(select * from " + table.TableName + " where ENG = '" + itemRow["ENG"].ToString() + "') "+
18                              " begin return; end else begin INSERT INTO " + table.TableName + "([ENG],[GB],[B5],[FILE],[MSG])" +
19                              "VALUES('" + itemRow["ENG"].ToString() + "'" +
20                              ",'" + itemRow["GB"].ToString() + "'" +
21                              ",'" + itemRow["B5"].ToString() + "'" +
22                              ",'" + itemRow["FILE"].ToString() + "'" +
23                              ",'" + itemRow["MSG"].ToString() + "') end";
24                 using (SqlConnection sqlconn = new SqlConnection(connectString))
25                 {
26                     sqlconn.Open();
27  
28                     SqlCommand sqlcommand = new SqlCommand(sql, sqlconn);
29                     sqlcommand.ExecuteNonQuery();
30                     sqlconn.Close();
31                 }
32             }
33         }
34 ————————————————
View Code

2,通过adapter入库,这种入库,起先,你需要先把datatable放入到dataset中然后进行入库,这种方式主要是对库中对应的表进行增删改,方便使用(效率只比第一种方式好点)

 1        /// <summary>
 2         /// 通过adapter更新数据库
 3         /// </summary>
 4         /// <param name="dataset"></param>
 5         public static void DataadapterInssert(DataSet dataset)
 6         {
 7             if (dataset.Tables.Count > 0)
 8             {
 9                 foreach (DataTable itemTable in dataset.Tables)
10                 {
11                     SqlCommand insertcommand = new SqlCommand("if exists(select * from " + itemTable.TableName + " where ENG = @ENG) begin return; end "+
12                                       " else begin INSERT INTO " + itemTable.TableName + "([ENG],[GB],[B5],[FILE],[MSG])" +
13                                       "VALUES(@ENG, @GB,@B5,@FILE,@MSG) end", new SqlConnection(connectString));
14                     insertcommand.Parameters.Add("@ENG", SqlDbType.VarChar, 100, "ENG");
15                     insertcommand.Parameters.Add("@GB", SqlDbType.VarChar, 100, "GB");
16                     insertcommand.Parameters.Add("@B5", SqlDbType.VarChar, 200, "B5");
17                     insertcommand.Parameters.Add("@FILE", SqlDbType.VarChar, 200, "FILE");
18                     insertcommand.Parameters.Add("@MSG", SqlDbType.VarChar, 100, "MSG");
19  
20                     SqlDataAdapter sqldataadapter = new SqlDataAdapter();
21                     sqldataadapter.InsertCommand = insertcommand;
22  
23                     sqldataadapter.Update(dataset, itemTable.TableName);
24                 }
25             }
26             
27         }
View Code

3,重头戏都在最后,这种方式速度比前两种快很多,适合用于大量数据插入更新,也将datatable放入dataset中然后通过遍历,将datatable复制到数据库中对应的表中,快速便捷

 1         /// <summary>
 2         /// 通过SqlBulkCopy复制table数据到数据库
 3         /// </summary>
 4         /// <param name="dataset"></param>
 5         public static void SqlbulkcopyInsert(DataSet dataset)
 6         {
 7             string ie;
 8             if (dataset.Tables.Count > 0)
 9             {
10                 foreach (DataTable itemTable in dataset.Tables)
11                 {
12                     // SqlBulkCopy sqlbulkcopy = new SqlBulkCopy(connectString, SqlBulkCopyOptions.KeepIdentity);//删除自增ID插入原始数据
                    SqlBulkCopy sqlbulkcopy = new SqlBulkCopy(connectString, SqlBulkCopyOptions.UseInternalTransaction);//批量事务处理
13 sqlbulkcopy.DestinationTableName = itemTable.TableName;//数据库中的表名 14 for (int i = 0; i < itemTable.Rows.Count; i++) 15 { 16 ie = itemTable.Rows[i][2].ToString(); 17 } 18 sqlbulkcopy.WriteToServer(itemTable); 19 } 20 } 21 22 }

版权声明:本文为CSDN博主「丘鸣山RM」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zyzBulus/article/details/77479272

原文地址:https://www.cnblogs.com/topboy168/p/12367408.html