zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    树莓派3下开启SSH服务
    没有显示器连接树莓派
    没有屏幕和键盘如何玩转树莓派
    无显示器通过网线连接笔记本电脑玩转树莓派
    解决某些软件无法在虚拟机中运行的方法
    sql注入-基于布尔型的盲注入门
    前台数据传到后台,日期类型序列化后与前台传过来的数据不一致
    layui修改表格行高
    jQuery动态回到顶部
    禁止选中页面内容
  • 原文地址:https://www.cnblogs.com/topboy168/p/12367408.html
Copyright © 2011-2022 走看看