
excel
public int tableNameNum = 0; //记录excel中所有表的数量 public OleDbConnection connection = new OleDbConnection(Provider=microsoft.
*.oledb.4.0;Data Source=C:UsersCESDesktop*.mdb);//建立与数据库文件*.mdb的连接//打开以.xls或者.xlsx结尾的文件 private void button1_Click(object sender, EventArgs e){OpenFileDialog dLG = new OpenFileDialog(); //创建窗体 *.filter = excel文件 (*.xls;*.xlsx)|*.xls;*.xlsx; //浏览过滤出以.xls或者.xlsx结尾的文件 if(*.showdialog() == *.ok){string filePath = *.filename; //获取打开文件的路径 this.*.text = filePath;}足}//获取excel中所有表的表名 public string[] GetTableName(string excelFilename){//建立与指定excel文件的连接 s控灯犯难拉刘纪般溶tring connectionString =
*.format(Provider=microsoft.*.oledb.12.0;Data Source={0};Jet OLEDB:Engine Type=35;Extended Properties=excel 8.0;Persist Security Info=False, excelFilename);string[] tableName = new string[20]; //存储excel中所有表的表名 string temp; //中间变量using (system.*.oledbconnection connection = new sys几效能文巴民好tem.*.oledbconnection(connectionString)){*.open();//获取数据库架构信息,包括列、主键、表等信息 DataTable table = *.getoledbschematable(system.*.oledbschemaguid.tables, null);for (int i = 0; i table.*.count;i++ ){temp = *.rows[i][Table_Name].ToString(); //获取excel中的表名 tableName[i] = *.replace($, ); //因为获取的表名最后会有$符号,所以要替换 }tableNameNum = table.*.count;*.close();}return tableName;
LG
//获取excel中每张表的数据,以datatable类型返回 public DataTable GetexcelTable(string excelFilename,string tableName){//建立与指定excel文件的连接 string connectionString =
*.format(Provider=microsoft.*.oledb.12.0;Data Source={0};Jet OLEDB:Engine Type=35;Extended Properties=excel 8.0;Persist Security Info=False, excelFilename);DataSet ds = new DataSet(); //数据集 //using中声明的对象connection,在using语句块结束后会自动释放 using (system.*.oledbconnection connection = new system.*.oledbconnection(connectionString)){*.open();//获取数据库架构信息,包括列、主键、表等信息 DataTable table = *.getoledbschematable(system.*.oledbschemaguid.tables, null);string strexcel = select * from + [ + tableName + $];//打开数据链接,得到一个数据集 OleDbDataAdapter adapter = new OleDbDataAdapter(strexcel, connectionString);//在数据集中查询表名为tableName的表,然后把其数据在装入数据集ds中 *.fill(ds, tableName);
*.close();}return *.tables[tableName];//以datatable类型返回数据集ds中表名为tableName的表 }
//判断在数据库中,指定表名的表是否存在 public bool TableExists(string table){bool rythm;
*.open();//读取表名为table的表的行数信息 rythm = *.getschema(Tables, new string[4] { null, null, table, TABLE }).*.count 0;
*.close();
return rythm;}
//如果在建表之前,数据库已经存在该表,那么首先要先删除此表 public void DeleteTable(string tableName){string sql = drop table +tableName+;;
*.open();
OleDbCommand cmd = new OleDbCommand(sql, connection);
*.executenonquery();
*.close();}//中间类型为dataTable的表数据转换到数据库mdb文件中 public bool dataTableToMdb(string excelPath,string tableName){//获取excel中表的数据 DataTable dt = GetexcelTable(excelPath,tableName);//表中数据大于等于两行,数据转入格式才是正确的 if (*.*.count = 2){string[] cloumnName = new string[50];//获取excel中表的所有列名 for (int i = 0; i dt.*.count; i++){cloumnName[i] = *.rows[0][i].ToString();}//在mdb数据库文件中创建表 string sql = create table + tableName + ( + cloumnName[0] + varchar null);
*.open();
OleDbCommand cmd = new OleDbCommand(sql, connection);
*.executenonquery();
//在mdb数据库文件中,给已创建好的表添加好所有列 for (int i = 1; i dt.*.count; i++){sql = alter table + tableName + add + cloumnName[i] + varchar null;cmd = new OleDbCommand(sql, connection);
*.executenonquery();}//在mdb数据库文件中,给已创建好的表加入数据 for (int t = 1; t *.*.count; t++){sql = insert into + tableName + values(';
for (int k = 0; k dt.*.count; k++){if (k != dt.*.count - 1){sql = sql + *.rows[t][k].ToString() + ',';}else {sql = sql + *.rows[t][k].ToString() + ');}
}cmd = new OleDbCommand(sql, connection);
*.executenonquery();}
*.close();
return true;
}else {*.show(excel中+ tableName +表的原始数据格式不正确!);}return false;
}
private void button2_Click(object sender, EventArgs e){int flag = 1; //判断由excel表导入到Mdb是否成功的标记变量 //如果有一张excel表导入不成功,那么就标记为0,整个过程就视为失败了 //全部excel表导入进去,整个过程才算完全成功if(*box1.*.length == 0) //判断是否选中导入的excel文件 {*.show(请选择导入数据的Execl文件);}else {string[] tableName = new string[20];//获取excel中所有表的表名 tableName = GetTableName(this.*.trim());
for(int j = 0;j tableNameNum;j++){if (!TableExists(tableName[j])) //判断数据库中是否已有要新建的表,没有的话,直接新建,有的话,先删除,再新建 {if(dataTableToMdb(this.*.trim(),tableName[j])) //excel表转换到Mdb数据库中 {*.show(导入 + tableName[j] + 表数据成功!);}else {flag = 0;*.show(导入 + tableName[j] + 表数据失败!);}}else {DeleteTable(tableName[j]); //删除数据库已有的同名表if (dataTableToMdb(this.*.trim(), tableName[j])) ////excel表转换到Mdb数据库中 {*.show(导入 + tableName[j] + 表数据成功!);}else {flag = 0;*.show(导入 + tableName[j] + 表数据失败!);}}}
if(flag==1){*.show(导入数据成功!);}else {***.show(导入数据没能完全成功!);}}}}}
Copyright © 2025 IZhiDa.com All Rights Reserved.
知答 版权所有 粤ICP备2023042255号