详解C#把DataTable中数据一次插入数据库的方法
程序员文章站
2022-04-21 08:34:12
现在实际的情况是这样的:
客户有一台打卡机,员工打卡的信息全部储存在打卡机的access数据库里面,现在客户引入了一种新的管理系统,需要将access数据库中的打卡数据同...
现在实际的情况是这样的:
客户有一台打卡机,员工打卡的信息全部储存在打卡机的access数据库里面,现在客户引入了一种新的管理系统,需要将access数据库中的打卡数据同步到sql server数据库中,由于时间比较久,数据积累了有40多万条。
软件功能:
选择access数据库文件,填入目标sql server数据库的ip地址,然后开始进行同步。
实现方法:
1、先把access数据库中要导入的数据存入datatable中
配置文件中的数据库连接字符串
<connectionstrings> <add name="oleconstr" connectionstring="provider=microsoft.jet.oledb.4.0;data source="/> <add name="sqlconstr" connectionstring ="server=tiantiankaixing;database=新建数据库;trusted_connection=sspi"/> </connectionstrings>
封装读取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:\project\tiantiankaixing\admin.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(); } } } } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: 常见无线网络故障的排除思路
下一篇: C#遍历文件夹及子目录下所有图片