从SQLserver中导出表数据到Access
每篇随便都得有个背景吧,这次做一个项目时,突然碰到这个样一个问题,需要将本地sqlserver中的数据导出到access后,再传输access数据库,所以就在想怎样实现这样的操作。后面经过在网上查找了一些资料结合以前的知识,搞了这样一个东西出来;
1 /// <summary> 2 /// 从sqlserver中导出数据到access 3 /// state=0 Jzjl 导出菜品信息表 4 /// state=1 lbxf_jz 导出收银信息表 5 /// </summary> 6 /// <param name="host"></param> 7 /// <param name="name"></param> 8 /// <param name="password"></param> 9 /// <param name="root"></param> 10 static void BackupA(string tablename, int state, string connection = "Data Source=.;Initial Catalog=mpcy;Integrated Security=True") 11 { 12 string path = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase; 13 string file = "mpcy.model"; 14 string root = path + file; 15 16 Console.WriteLine("文件路径:" + root); 17 //备份Access数据库 18 if (state == 0) { tablename = "Jzjl"; chkandcrt(root); } else { tablename = "lbxf_jz"; } 19 20 root = BakPath + "\\mpcy.dat"; 21 string accesssqlconn = @"Provider=Microsoft.ACE.OLEDB.12.0;Jet OLEDB:DataBase Password=xhjxjf168;Data Source=" + root + ";"; 22 //SqlHelper.ConnectionString = string.Format("Data Source={0};Initial Catalog={1};User ID={2};Password={3}", "127.0.0.1", "mpcyTemp", "sa", "12345"); 23 //connection = string.Format("Data Source=.;Initial Catalog={0};Integrated Security=True", "mpcyTemp"); 24 SqlHelper.ConnectionString = connection; 25 //从sqlserver中读出数据到datatable 26 OleDbConnection conn = new OleDbConnection(accesssqlconn); 27 OleDbCommand cmd = conn.CreateCommand(); 28 try 29 { 30 DataTable user = SqlHelper.ExecuteTable(CommandType.Text, string.Format("select * from {0}", tablename), null); 31 int i = 0; 32 if (user.Rows.Count > 0) 33 { 34 using (conn) 35 { 36 using (cmd) 37 { 38 conn.Open(); 39 40 //每次导入前,先清空数据库表 41 string sql = string.Format("delete * from {0}", tablename); cmd.CommandText = sql; cmd.ExecuteNonQuery(); 42 43 OleDbDataAdapter adp = new OleDbDataAdapter(); adp.SelectCommand = new OleDbCommand(string.Format("select * from {0}", tablename), conn); OleDbCommandBuilder cb = new OleDbCommandBuilder(adp); DataSet data = new DataSet(); 44 //加载access中的数据表,并通过追加的方式放入dataset中 45 adp.Fill(data); 46 for (int j = 0; j < user.Rows.Count; j++) 47 { 48 //for (int l = 0; l < user.Columns.Count; l++) 49 //{ 50 // if (l > user.Columns.Count - 1) 51 // break; 52 DataRow dr = data.Tables[0].NewRow(); 53 for (int k = 0; k < dr.Table.Columns.Count; k++) 54 { 55 Type typ = user.Rows[j][k].GetType(); 56 if (typ == typeof(double) || typ == typeof(int) || typ == typeof(decimal) || typ == typeof(float)) 57 { if (string.IsNullOrEmpty(user.Rows[j][k].ToString())) { dr[k] = "0"; } else { dr[k] = user.Rows[j][k].ToString(); } } 58 else 59 { if (string.IsNullOrEmpty(user.Rows[j][k].ToString())) { dr[k] = " "; } else { dr[k] = user.Rows[j][k].ToString(); } } 60 } 61 //dr["UserID"] = user.Rows[j][l].ToString(); 62 //dr["UserName"] = user.Rows[j][l + 1].ToString(); 63 //网dataset中添加数据 64 data.Tables[0].Rows.Add(dr); 65 //} 66 } 67 data.Tables[0].TableName = tablename; 68 i = adp.Update(data.Tables[0]); //通过update方法Insert或update数据 69 Console.WriteLine(i.ToString()); 70 } 71 } 72 } 73 } 74 //判断异常类型 75 catch (SqlException er) 76 { 77 ErrorTime++; 78 if (ErrorTime > 3) 79 { FileLog.Logger.Write(er); FileLog.Logger.Write("错误次数太多,退出程序!"); Console.WriteLine("错误次数太多,退出程序!"); } 80 else 81 { 82 if (ErrorTime % 2 == 0) 83 { 84 FileLog.Logger.Write("尝试使用MSSQL身份验证登陆数据库!"); FileLog.Logger.Write(er); Console.WriteLine("SQLSERVER打开失败,尝试使用MSSQL方式登录数据库。"); 85 string sqlcon = string.Format("Data Source={0};Initial Catalog={1};User ID={2};Password={3}", ConfigHelper.DBHost, "mpcy", ConfigHelper.DBName, ConfigHelper.DBPwd); 86 //string sqlcon = string.Format("Data Source={0};Initial Catalog={1};User ID={2};Password={3}", "127.0.0.1", "mpcyTemp", "sa", "12345"); 87 BackupA("", state, sqlcon); 88 } 89 else 90 { FileLog.Logger.Write("尝试使用WINDOWS身份验证登陆数据库!"); FileLog.Logger.Write(er); Console.WriteLine("SQLSERVER打开失败,尝试使用WINDOWS方式登录数据库。"); BackupA("", state); } 91 } 92 } 93 catch (Exception e) 94 { 95 FileLog.Logger.Write("数据导出失败!"); FileLog.Logger.Write(e); Console.WriteLine("数据导出失败!"); 96 //throw (new Exception("数据导出失败,请联系IT部!")); 97 } 98 finally 99 { 100 conn.Close(); 101 } 102 if (state == 0) 103 { 104 string sqlcon = string.Format("Data Source={0};Initial Catalog={1};User ID={2};Password={3}", ConfigHelper.DBHost, "mpcyTemp", ConfigHelper.DBName, ConfigHelper.DBPwd); 105 //string sqlcon = string.Format("Data Source={0};Initial Catalog={1};User ID={2};Password={3}", "127.0.0.1", "mpcyTemp", "sa", "12345"); 106 BackupA("", 1, sqlcon); 107 } 108 } 109 110 /// <summary> 111 /// 检查并备份 112 /// </summary> 113 /// <param name="check"></param> 114 /// <param name="root"></param> 115 static void chkandcrt(string root) 116 { 117 try { if (!Directory.Exists(BakPath)) { Directory.CreateDirectory(BakPath); } if (!File.Exists(BakPath + "\\mpcy.dat")) { File.Copy(root, BakPath + "\\mpcy.dat"); } } 118 catch (Exception e) 119 { FileLog.Logger.Write(e); FileLog.Logger.Write("文件检查失败!"); Console.WriteLine("文件信息检查失败!"); } 120 }
代码不多,核心代码就这几句:
OleDbDataAdapter adp = new OleDbDataAdapter(); adp.SelectCommand = new OleDbCommand(string.Format("select * from {0}", tablename), conn); OleDbCommandBuilder cb = new OleDbCommandBuilder(adp); DataSet data = new DataSet();44 //加载access中的数据表,并通过追加的方式放入dataset中45 adp.Fill(data);46 for (int j = 0; j < user.Rows.Count; j++)47 {48 //for (int l = 0; l < user.Columns.Count; l++)49 //{50 // if (l > user.Columns.Count - 1)51 // break;52 DataRow dr = data.Tables[0].NewRow();53 for (int k = 0; k < dr.Table.Columns.Count; k++)54 {55 Type typ = user.Rows[j][k].GetType();56 if (typ == typeof(double) || typ == typeof(int) || typ == typeof(decimal) || typ == typeof(float))57 { if (string.IsNullOrEmpty(user.Rows[j][k].ToString())) { dr[k] = "0"; } else { dr[k] = user.Rows[j][k].ToString(); } }58 else59 { if (string.IsNullOrEmpty(user.Rows[j][k].ToString())) { dr[k] = " "; } else { dr[k] = user.Rows[j][k].ToString(); } }60 }61 //dr["UserID"] = user.Rows[j][l].ToString();62 //dr["UserName"] = user.Rows[j][l + 1].ToString();63 //网dataset中添加数据64 data.Tables[0].Rows.Add(dr);65 //}66 }67 data.Tables[0].TableName = tablename;68 i = adp.Update(data.Tables[0]); //通过update方法Insert或update数据 69 Console.WriteLine(i.ToString());
这中间是这样的:先通过一个DataAdapter读取了Access数据库的结构,然后再通过从Sqlserver中读取到数据的DataTable将数据导入到这个被DataAdapter填充了结构的DataSet的表中。最后,通过这个DataAdapter来更新整个表,当然,表的结构要一致!!
另外,这里有一个OleDbCommandBuilder,根据网上解释:自动生成用于协调对 DataSet的更改与关联数据库的单表命令。也就是说,在我们这个例子中,我们的表结构是没有改变,但是后面新添加了数据,于是这个OleDbCommandBuilder就会自动将表单命令生成为Insert语句,于是就执行了插入命令,但是如果在我们初始化的DataSet中本来就存在数据,然后我们进行了对原始数据的改变,后面就会将命令变成Update。
这样,就将Sqlserver中的数据填充到了Access数据库中了。
参考:http://bbs.bccn.net/thread-292655-1-1.html
http://blog.csdn.net/a3676212/article/details/2776027
http://www.cnblogs.com/rhythmK/archive/2010/07/19/1780874.html
转载于:https://www.cnblogs.com/suchi/p/4230174.html
从SQLserver中导出表数据到Access相关推荐
- WPS表格使用VBA往SQLServer中写入数据
WPS表格使用VBA往SQLServer中写入数据 此代码在WPS表格中运行正常,office Excel中没有测试过,用的都是WPS所以- 需要提前安装WPS VBA插件否则无法运行. A1处如果去 ...
- Navicat向sqlserver中插入数据时提示:当 IDENTITY_INSERT 设置为 OFF 时,不能向表中的标识列插入显式值
场景 通过Navicat向sqlserver中插入一条数据时提示: 解决 这是因为在设计表时,将主键ID设置为自增约束,当插入数据或者执行插入语句时,如果包含这个 主键字段,就会提示错误. 打开数据库 ...
- 关于sqlserver中xml数据的操作
实现的功能 把select 统计处的数据集保存xml 数据中,然后再显示出来 目前保存到xml数据中比较好操作 显示不好操作 举例 执行后 报错 declare @mydoc xml set @myd ...
- 在sqlServer中把数据导出为insert脚本
有时候为了把数据导出为insert脚本,不得不用一些小工具,或者通过自己写存储过程来完成这一操作.其实SqlServer本身就有这种功能.以下是详细步骤: 转载于:https://www.cnblog ...
- java sqlserver 插入数据_java中怎样向SQLserver中插入数据
1. 通过Microsoft的JDBC驱动连接.此JDBC驱动共有三个文件,分别是mssqlserver.jar.msutil.jar和 msbase.jar,可以到微软的网站去下载(://www.m ...
- 关于Sqlserver中 BCP命令,实现数据导出功能。
关于Sqlserver中 BCP命令,实现数据导出功能. exec master..xp_cmdshell 'bcp "select 账号 ,姓名, 账号 from datat.dbo.个人 ...
- 从sqlserver中数据写入mysql_从SQL server数据库导入Mysql数据库的体验
起原:网海拾贝 ,因任务需要,要将寄存在sqlserver数据库中的数据全部导入到mysql数据库中,在网上集合关连资料,找到两种体例,而今分袂谈谈对他 起原:网海拾贝 因任务需要,要将寄存在sql ...
- access中主键自动增长_ACCESS与EXCEL融合应用系列(一) :把数据导入Access
Excel无疑是我们手头最便利的报表汇总及数据分析利器,但由于微软对EXCEL定位的问题,当我们遇到大容量数据需要存储.处理和分析的时候,excel就显得力不从心了.这种情况下我们有两种选择:①加装P ...
- access查询两列信息合并输出_如何在Access中合并两个数据表中的数据
当我们使用Access处理数据时,我们经常需要合并具有相同表结构的两个数据记录.那么如何实现这一功能呢?以下编辑愿与您分享. 工具/材料 Access 操作方法 打开Access软件,新建两个数据表. ...
最新文章
- CSS em与px区别-CSS教程
- 获取 GPG 密钥失败:[Errno 14] 2011-05-26 14:43
- AtCoder AGC022E Median Replace (字符串、自动机、贪心、计数)
- 2000坐标系xy坐标几位_2000国家大地坐标系转换演示及实践应用专题培训研讨班...
- 2017.3.20上午
- 前端学习(1771):前端调试之serverworkers的概念和方法
- Replace Type Code with State/Strategy(以State/Strategy取代类型码)
- 数据库报错SELECT list is not in GROUP BY clause and contains nonaggregated col
- java process 中断_从Java运行外部程序,读取输出,允许中断
- 1000道Python题库系列分享19(81道填空判断题)
- Jquery常用方法合集,超实用
- unet服务器向客户端发消息,unet
- 开源demo| 视频应用类开源 Demo 大盘点
- CentOS 7.4 安装网易云音乐
- 计算机集成声卡输出通道,电脑集成与独立声卡的差别有哪些?
- 欢迎使用传真服务器系统,coFax传真服务器 OCR页面号码识别传真
- IT面试经验:简历上项目经验怎么写?3招教你来包装!
- 炼数成金(dataguru)IT技能修炼
- 全国软件2. 三人年龄
- Unity3D之简单AR游戏
热门文章
- 真侍魂_全角色特殊能力
- 2016年中国UPS不间断电源 产业研究报告
- mysql查询某字段包含手机号
- 瑞士苏黎世联邦理工学院计算机专业,苏黎世联邦理工学院计算机专业
- 【Esp32】Esp32+sx1268 Spi接口驱动SX1268模块
- 2020.11.18第十三章 事件(事件处理程序;事件对象;事件类型:UI事件;焦点事件;鼠标与键盘事件 变动事件 模拟事件)
- compressGOP函数代码跟踪
- L1-040. 最佳情侣身高差 java
- 基于matlab的蝗虫优化(Grasshopper Optimization Algorithm,GOA)算法仿真
- 华为 AISC 研究型实习生招聘~北京 or 深圳