用c# 将Access表修改复制到Sql server表
2015-07-30 10:13
225 查看
开始想直接在sql server 2008用存储过程写。用到了OpenRowSet、opendatasource两个函数,然而启用Ad Hoc DistributedQueries的方法后还是一直报错,查了资料可能是因为使用的是64位系统,最终也没改好,以后再来研究,可以参考http://www.cnblogs.com/OpenCoder/archive/2010/03/18/1689321.html
由于时间紧迫,就换了个方法在vs2014上用c#做:
A 打开Access数据库
B 打开sql server数据库
C 用SQL语句查询Access表内容
DataSet的Fill方法形象的解说 http://blog.sina.com.cn/s/blog_67737c1d01017ike.html
D 对Access表中数据进行修改
方法:克隆Access表结构,修改后存入新表中
Access转SQL server 注意事项 http://www.jb51.net/article/6869.htm
E Access表中内容批量复制到Sqlserver 中
第一次做,查了很多资料,
参考:
C#操作连接Access数据库
http://jingyan.baidu.com/article/ab0b563094fab9c15afa7d8c.html
关于批量导入数据类SqlBulkCopy
导入数据时增加额外的列
http://q.cnblogs.com/q/37192/
修改数据表DataTable某一列的类型和记录值http://www.cnblogs.com/starxp/articles/1789607.html
C# 如何批量插入、修改http://wenku.baidu.com/link?url=eyByxtRv9iOU9ayAEAVEjIR1gjbMn1oxShWZ-wHYznKecTGUxF4enrxbni4gfNFxXduRwcB7v7GoKDPI7c0i6V7E2bqS1gVT5ETOTYdTaV_
批量复制操作(SqlBulkCopy)的出错处理:事务提交、回滚
http://blog.csdn.net/westsource/article/details/6658109
C#
使用SqlBulkCopy类批量复制大数据
http://www.cnblogs.com/zfanlong1314/archive/2013/02/05/2892998.html
SqlBulkCopy(批量复制)使用方法
http://www.cnblogs.com/scottckt/archive/2011/02/16/1955862.html
使用事务和SqlBulkCopy导入大批量数据
http://blog.csdn.net/okman1214/article/details/6938037
由于时间紧迫,就换了个方法在vs2014上用c#做:
A 打开Access数据库
private bool OpenDbAccess() { try { //捕获数据库打开异常 OleDbConnection _oleDbConn = new OleDbConnection(@"provider=microsoft.jet.oledb.4.0; Data Source=C:\Data.mdb"); _oleDbConn.Open(); return true; } catch (Exception) { return false; } }
B 打开sql server数据库
SqlConnection conn = new SqlConnection(); conn.ConnectionString = "server=服务器地址;uid=sa;pwd=xxx;database=数据库名"; conn.Open();
C 用SQL语句查询Access表内容
OleDbDataAdapter _oleDbAda = new OleDbDataAdapter(SQL语句, Access表连接); if (!string.IsNullOrEmpty(SQL语句) && !string.IsNullOrEmpty(Access表名))//要求表和sql语句不为空 { var dt = new DataSet();//声明结果集对象 _oleDbAda.Fill(dt, tableName); if (dt != null) { SqlBulkCopyData(dt); } _oleDbAda.Dispose(); _oleDbConn.Close(); return dt; } else { return null; }
DataSet的Fill方法形象的解说 http://blog.sina.com.cn/s/blog_67737c1d01017ike.html
D 对Access表中数据进行修改
方法:克隆Access表结构,修改后存入新表中
if (dt != null) { //将DataSet转成DataTable DataTable data = dt.Tables[0]; //克隆data表用于修改Access内容 DataTable dtResult = new DataTable(); dtResult = data.Clone();//克隆表结构 foreach (DataRow row in data.Rows) { DataRow rowNew = dtResult.NewRow(); rowNew["ID"] = row["ID"]; //修改Area记录值,保留到省 if (rowNew["Area "] != null) { var areaInt = row["Area"].ToString().IndexOf(" "); rowNew["Area "] = row["Area "].ToString().Substring(0, areaInt); //截取字符串空格前面的内容 } else { rowNew["Area "] = row["Area "]; } //修改Type记录值,去掉“中国” if (rowNew["Type"] != null) { rowNew["Type "] = row["Type "].ToString().Replace("中国", " "); } else { rowNew["Type "] = row["Type "]; } dtResult.Rows.Add(rowNew);
Access转SQL server 注意事项 http://www.jb51.net/article/6869.htm
E Access表中内容批量复制到Sqlserver 中
SqlTransaction sqlbulkTransaction = conn.BeginTransaction(); //插入数据的同时检查约束,如果发生错误调用sqlbulkTransaction事务 SqlBulkCopy copy = new SqlBulkCopy(conn, SqlBulkCopyOptions.CheckConstraints, sqlbulkTransaction); //直接导入大数据 for (var i = 0; i < 6; i++)//i为Access中列的数量 { copy.ColumnMappings.Add(dtResult.Columns[i].ColumnName, data.Columns[i].ColumnName); } try { copy.WriteToServer(dtResult); //提交事务 sqlbulkTransaction.Commit(); } catch (Exception e) { //回滚事务 sqlbulkTransaction.Rollback(); Console.WriteLine(e.ToString()); } finally { copy.Close(); conn.Close(); }
第一次做,查了很多资料,
参考:
C#操作连接Access数据库
http://jingyan.baidu.com/article/ab0b563094fab9c15afa7d8c.html
关于批量导入数据类SqlBulkCopy
导入数据时增加额外的列
http://q.cnblogs.com/q/37192/
修改数据表DataTable某一列的类型和记录值http://www.cnblogs.com/starxp/articles/1789607.html
C# 如何批量插入、修改http://wenku.baidu.com/link?url=eyByxtRv9iOU9ayAEAVEjIR1gjbMn1oxShWZ-wHYznKecTGUxF4enrxbni4gfNFxXduRwcB7v7GoKDPI7c0i6V7E2bqS1gVT5ETOTYdTaV_
批量复制操作(SqlBulkCopy)的出错处理:事务提交、回滚
http://blog.csdn.net/westsource/article/details/6658109
C#
使用SqlBulkCopy类批量复制大数据
http://www.cnblogs.com/zfanlong1314/archive/2013/02/05/2892998.html
SqlBulkCopy(批量复制)使用方法
http://www.cnblogs.com/scottckt/archive/2011/02/16/1955862.html
使用事务和SqlBulkCopy导入大批量数据
http://blog.csdn.net/okman1214/article/details/6938037
相关文章推荐
- Access 2000 数据库 80 万记录通用快速分页类
- 十万条Access数据表分页的两个解决方法
- VB6实现连接Access数据库的ADODB代码实现方法
- Access中字段上自动打开的输入法的解决方法
- Access to SQLserver 数据库生迁脚本编写器(DB_CreateSqlEV1.06下载)
- asp Access数据备份,还原,压缩类代码
- VB使用ADO操作Access数据库
- 文本、Excel、Access数据导入SQL Server2000的方法
- Access 数据类型与 MS SQL 数据类型的相应
- ASP代码实现自动清除替换ACCESS(MDB)数据库的日文字符的
- 通过asp程序来创建access数据库
- Access转SqlServer的注意事项
- Access和SQL Server里面的SQL语句的不同之处
- ACCESS数据库修改自动编号的ID值为零的方法分享
- access 数据库自启动困难解决方法
- access的备注字段限制64K
- Access出现"所有记录中均未找到搜索关键字"的错误解决
- 中文Access2000速成教程--1.8 定义表之间的关系
- access不能打开注册表关键字错误处理方法(80004005错误)
- Access 使用总结一篇