栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C# > C#教程

详解C#把DataTable中数据一次插入数据库的方法

C#教程 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

详解C#把DataTable中数据一次插入数据库的方法

现在实际的情况是这样的:

客户有一台打卡机,员工打卡的信息全部储存在打卡机的Access数据库里面,现在客户引入了一种新的管理系统,需要将Access数据库中的打卡数据同步到SQL Server数据库中,由于时间比较久,数据积累了有40多万条。

软件功能:

选择Access数据库文件,填入目标SQL Server数据库的IP地址,然后开始进行同步。

实现方法:

1、先把Access数据库中要导入的数据存入DataTable中

配置文件中的数据库连接字符串


  
  
  
 

封装读取Access数据库数据到DataTable中的方法

public static string OleConStr = ConfigurationManager.ConnectionStrings["oleConStr"].ConnectionString ;

 public static DataTable OleGetDataTable(string sql, string filePath)
    {
      
      string a = OleConStr + filePath;
      using (OleDbConnection conn = new OleDbConnection(a))
      {

 using (OleDbDataAdapter da = new OleDbDataAdapter(sql, conn))
 {
   try
   {
     conn.Open();
     DataTable dt = new DataTable();
     da.Fill(dt);
     return dt;
   }
   catch (Exception ex)
   {
     throw ex;
   }
   finally
   {
     if (conn.State == ConnectionState.Open)
conn.Close();
   }
 }
      }
    }

 读取目标Access数据库到Datatable

string sql = "select Id,Time from checkinout";
DataTable dt = AcHelper.OleGetDataTable(sql, @"F:projecttiantiankaixingadmin.mdb");

2、封装批量插入数据SQL Server数据的方法

public static void DataTableToSQLServer(DataTable dt,string connectString)
    {
      string connectionString = connectString;

      using (SqlConnection destinationConnection = new SqlConnection(connectionString))
      {
 destinationConnection.Open();

 using (SqlBulkCopy bulkCopy = new SqlBulkCopy(destinationConnection))
 {


   try
   {

     bulkCopy.DestinationTableName = "checkinout";//要插入的表的表名
     bulkCopy.BatchSize = dt.Rows.Count;
     bulkCopy.ColumnMappings.Add("ID", "ID");//映射字段名 DataTable列名 ,数据库 对应的列名 
     bulkCopy.ColumnMappings.Add("TIME", "TIME");
     
     bulkCopy.WriteToServer(dt);
     System.Windows.Forms.MessageBox.Show("插入成功");
   }
   catch (Exception ex)
   {
     Console.WriteLine(ex.Message);
   }
   finally
   {
     

   }
 }


      }

    }

3、调用DataTableToSQlServer()方法

string localCon = "server=tiantiankaixing;database=Test;trusted_connection=sspi";
Entity.DataTableToSQLServer(dt, localCon);

即可将DataTable中的全部数据插入数据库

附:SqlBulkCopy的简单使用方法

public void Test()
    {
      string connectionString = "server=tiantiankaixing;database=新建数据库;trusted_connection=sspi";
      
      using (SqlConnection sourceConnection =
     new SqlConnection(connectionString))
      {
 sourceConnection.Open();
 //获取读取的表总行数
 SqlCommand commandRowCount = new SqlCommand("select count(*) from student",sourceConnection);
 long countStart = System.Convert.ToInt32(commandRowCount.ExecuteScalar());
 

 //使用SqlDataReader读取源数据
 SqlCommand commandSourceData = new SqlCommand("select * from student", sourceConnection);
 SqlDataReader reader =commandSourceData.ExecuteReader();

 //测试用,把数据从一个表批量插入到另一个表
 //现实生活中肯定不会
 using (SqlConnection destinationConnection =new SqlConnection(connectionString))
 {
   destinationConnection.Open();

   //创建一个SQlBulkCopy对象
   //指定目标表名
   //指定要插入的行数
   //指定对应的映射
   using (SqlBulkCopy bulkCopy =new SqlBulkCopy(destinationConnection))
   {
     bulkCopy.DestinationTableName ="test";
     bulkCopy.BatchSize = 1;
     bulkCopy.ColumnMappings.Add("数据源列名","目标列名");

     try
     {

bulkCopy.WriteToServer(reader);
     }
     catch (Exception ex)
     {
Console.WriteLine(ex.Message);
     }
     finally
     {
reader.Close();
     }
   }
 }


      }
    }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/123696.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号