C#处理access数据库结构.docx_第1页
C#处理access数据库结构.docx_第2页
C#处理access数据库结构.docx_第3页
C#处理access数据库结构.docx_第4页
C#处理access数据库结构.docx_第5页
已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论