c# 将数据库(包括图片)备份到EXCEL中

来源:互联网 发布:淘宝css框架 编辑:程序博客网 时间:2024/05/16 07:53

目的:将打开的数据表(DATATABLE) 中的内容保存到EXCEL中,必要时再从EXCEL中将数据读回到数据表中。

其实很简单,利用Base64String来实现,只是要注意保存的图片不能太大(好象只能很小,200*200象素的都不行,有些图片很小,不到25K,但一转化就变成近50K,不知道为什么?有明白的给留下言),因为EXCEL中每个单元格只能存放32K的字符,超出就会自动截短,也就没法再读出来了。所幸我的系统只是存放照片,尺寸很小,不然就麻烦了

保存到EXCEL:

先要把列名导到EXCEL中:
for( int j = 1;j< dt.Columns.Count;j++)
     myExcel.Cells[1,j] = dt.Columns[j].ColumnName;
//myExcel为建立的Excel文件,关于这方面的操作,网上资料很多,我就不多说了

//为了简单,假设我们只是把照片这一列保存到EXCEL中,文字类似。

for(int i=0;i<dt.Rows.Count;i++)
  if(dr[i]["照片"] ==DBNull.Value) 
  myExcel.Cells[i+2,1] = ""; //如果没照片,则为空。i+2的目的是因为在EXCEL中第一行保存列名了,第二行才是数据,而DATATABLE中行数是从0开始的,正好差2
   else
  {
      byte[] byt = (byte[])dr[i]["照片"];
      string strpic = Convert.ToBase64String(byt);
      myExcel.Cells[i+2,1] = strpic;
  }

导入时:

OpenFileDialog file = new OpenFileDialog();
file.Filter = "Excel文件(*.xls)|*.xls";
if(file.ShowDialog()!= DialogResult.OK) return;

OleDbConnection excelCon = new OleDbConnection("provider = MicroSoft.Jet.OLEDb.4.0; data source = "+file.FileName+";Extended Properties=Excel 8.0;");
excelCon.Open();

OleDbDataAdapter excelAd = new OleDbDataAdapter("select * from [A:A]",excelCon);//只读A列
//读sheet1所有内容则要改为[sheet1$]
DataTable dttemp = new DataTable();
excelAd.Fill(dttemp);

注意此时保存进来的照片列只是string类型,在保存到数据库时要转化为byte[],方法是:
for(int i = 0;i<dttemp.Rows.Count;i++)
  if(dttemp.Rows[i]["照片"].ToString() != "")
     byte[] byt = Convert.FromBase64String(dttemp.Rows[i]["照片"].ToString());

剩下的就是插入数据库了,都会吧,我就不说了.


 
原创粉丝点击