




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C#处理access数据库结构using System;using System.Collections.Generic;using System.Text;using System.Data.OleDb;using System.Data;using System.Windows.Forms;namespace NewUserControl public class AccessTableCopy / / 获取两个数据库的路径 / / 老数据库的路径 / 新数据库的路径 public void GetTwoAccessConnection(string oldpath,string newpath) OleDbConnection newconnection; string connStr = Provider=Microsoft.ACE.OLEDB.12.0;Data Source= + newpath + ;Persist Security Info=False; newconnection = new OleDbConnection(connStr); string oldconnStr = Provider=Microsoft.ACE.OLEDB.12.0;Data Source= + oldpath + ;Persist Security Info=False; OleDbConnection oldconnection; oldconnection = new OleDbConnection(oldconnStr); this.BatchUpdate(newconnection, oldconnection, oldpath); / / 批量执行更新数据 / / 新数据库的连接 / 旧数据库的连接 / 老数据库的路径 public void BatchUpdate(OleDbConnection newconnection, OleDbConnection oldconnection,string oldpath) /获取旧数据库中的表列表 List oldtablelist =this.GetTableName(oldconnection); /获取新的数据库中的表 List newtablelist = this.GetTableName(newconnection); for(int i=0;ioldtablelist.Count;i+) string oldtablename = oldtablelisti; for(int j=0;j newtablelist.Count;j+) string newtablename = newtablelistj; /如果存在该表则直接插入数据,忽略大小写 if (oldtablename.ToLower() = newtablename.ToLower() /获取老数据库表中的表字段,并处理成符合sql标准 List listold = this.GetTableColumn(oldtablename, oldconnection); string oldcolumns = ; string columnname = new stringlistold.Count; foreach (string lst in listold) oldcolumns += lst + ,; oldcolumns = oldcolumns.Remove(oldcolumns.LastIndexOf(,), 1); oldcolumns.Trim(); /生成sql语句 string sql = ; sql = insert into + oldtablename + ( + oldcolumns + ) select + oldcolumns + from ;database= + oldpath + ;. + oldtablename + ; using (OleDbCommand command = new OleDbCommand(sql, newconnection) newconnection.Open(); command.ExecuteNonQuery(); newconnection.Close(); /获取指定表的主关键字段名称 string spiltname=this.PrimaryKeyName(oldtablename); /执行完批量更新以后删除重复的记录 this.DelMoreData(newtablename, spiltname, newconnection); break; / / 获取指定连接的数据库中的表列表 / / 指定数据库连接 / 数据库表中的列表 public List GetTableName(OleDbConnection conn) try conn.Open(); DataTable dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object null, null, null, TABLE ); conn.Close(); int n = dt.Rows.Count; string tableName = new stringn; int m = dt.Columns.IndexOf(TABLE_NAME); List list = new List(); for (int i = 0; i n; i+) DataRow dr = dt.Rowsi; list.Add(dr.ItemArray.GetValue(m).ToString(); return list; catch (Exception ex) throw ex; finally conn.Close(); / / 返回某一表的所有字段名 / / 待获取表的名称 / 数据库的连接 / 表字段列表 public List GetTableColumn(string tableName, OleDbConnection conn) List list = new List(); DataTable dt = new DataTable(); try conn.Open(); dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new object null, null, tableName, null ); conn.Close(); int n = dt.Rows.Count; /获取字段数据的排列顺序 int j = dt.Columns.IndexOf(ORDINAL_POSITION); /string strTable = new stringn; int m = dt.Columns.IndexOf(COLUMN_NAME); for (int i = 0; i n; i+) DataRow dr = dt.Rowsi; list.Add(dr.ItemArray.GetValue(m).ToString(); if (dr.ItemArray.GetValue(j).ToString() = 1) list.Remove(dr.ItemArray.GetValue(m).ToString(); return list; catch (Exception ex) throw ex; finally conn.Close(); #region 删除重复记录集 / / 删除表中多余的字段 / / 表名称 / 关键字段 / 新表的连接 public void DelMoreData(string tablename, string splitname, OleDbConnection newconnection) string idname = this.GetTableColumnIndex(tablename, newconnection); string delsql = delete from +tablename + a where exists(select * from +tablename+ b where; for (int i = 0; i b. + idname + ); using (OleDbCommand command = new OleDbCommand(delsql, newconnection) newconnection.Open(); command.ExecuteNonQuery(); newconnection.Close(); / / 获取相应表的关键字段 / / 表名 / 返回该字段名称 public string PrimaryKeyName(string tablename) string prykeyname = ; if (tablename.ToLower() = DList.ToLower() prykeyname = WorkerId; if (prykeyname != ) string split = prykeyname.Split(new Char , ); return split; else return null; / / 获取一个表的自动编号字段 / / 表名称 / 新表的连接 / 自动编号字段的name public string GetTableColumnIndex(string tableName, OleDbConnection conn) DataTable dt = new DataTable(); string indexidname = ; try conn.Open(); dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new object null, null, tableName, null ); conn.Close();
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公司安全教育培训
- 优化职业教育教学模式细则
- 2025重庆渝北区第三实验小学招聘学科教师若干人笔试备考试题及答案解析
- 2025至2030年中国成人用品行业市场调查研究及发展战略规划报告
- 利用数据分析优化营销方案
- 公司客户信息保护
- 促销活动执行规定
- 水利工程设计规范与规定
- 2025年泌尿科尿路感染临床诊疗经验交流考试卷答案及解析
- 船舶货物运输管理规程
- 《研学旅行课程设计》课件-制订研学课程目标
- JJF 1033-2023 计量标准考核规范
- 公安当场处罚案件培训课件
- 肉毒中毒医学课件
- EGFR信号转导机制及靶向治疗
- 领导力与团队建设技巧
- 畜牧业的畜禽疫病防控
- 抹灰工实操比赛方案
- 新人教版五年级小学数学全册奥数(含答案)
- 改写地球历史的25种石头
- 《冠心病科普》课件
评论
0/150
提交评论