用ODBC导出数据到Excel中

数据导出到Excel不一定要用Office的COM,利用ODBC也可以做到!

 

定义一个连接Excel文件的连接字符串:

String excelSql = @"Driver={Microsoft Excel Driver (*.xls)};READONLY=FALSE;DriverId=790;Dbq={0};DefaultDir=c:\;" ;

其中的{0}要实际替换为目标文件的路径和全名.

this.saveFileDialog1.Filter = "Excel文件.xls | *.xls";

string saveFileName  = "";
   DialogResult dr = this.saveFileDialog1.ShowDialog();
   if(dr != DialogResult.Cancel)
   {
    saveFileName = saveFileDialog1.FileName;
    if(File.Exists(saveFileName))
    {
     File.Delete(saveFileName);//删除目标文件
    }
      File.Copy("Book1.xls",saveFileName,true);//复制母板文件为目标文件

}

else

return;//保存文件对话框中选择了'取消'

}
 String conSql =excelSql.Replace("{0}",saveFileName);//替换连接字符串中的占位符
 OdbcConnection cnn = new OdbcConnection(conSql);

try{

cnn.Open();//打开连接

}

catch

{

return;//打开连接失败,退出

}

///下面在Excel文件中创建一个sheet

String sql = @"CREATE TABLE [新增Sheet] (
        [姓名] varchar(32),
        [单位名称] varchar(200)

       )";
      OdbcCommand cmd = new OdbcCommand(sql,cnn);
      try
      {
       cmd.ExecuteNonQuery();
      }
      catch
      {
       cnn.Close();
       cmd.Dispose();
       MessageBox.Show("导出失败!",this.title);
       return;
      }
      cmd.Dispose();

      sql = @"Select * from [新增Sheet]";
       cmd = new OdbcCommand(sql,cnn);
      DataSet newDs = new DataSet();

      OdbcDataAdapter adp = new OdbcDataAdapter(cmd);//生成DataAdapter

      try
      {
       adp.Fill(newDs);//生成一个空的数据集
      }
      catch
      {
       adp.Dispose();
       newDs.Dispose();
       cnn.Close();
       cmd.Dispose();
       MessageBox.Show("导出失败!",this.title);
       return;
      
      }
      DataSet ds = (DataSet)this.listView1.Tag;//listView1.Tag中保存的是要导出的dataset
      foreach(DataRow row in ds.Tables[0].Rows)//往目标数据集复制数据
      {
       DataRow newRow  = newDs.Tables[0].NewRow();
       newRow["姓名"] = row["姓名"];
       newRow["单位名称"] = row["单位名称"];

       newDs.Tables[0].Rows.Add(newRow);
      }
      OdbcCommandBuilder cb = new OdbcCommandBuilder(adp);//生成插入数据需要的Command
      int k = adp.Update(newDs);//插入数据到Excel中
      adp.Dispose();
      cnn.Close();
      cmd.Dispose();
      cb.Dispose();
      MessageBox.Show("导出成功,共导出" + k.ToString() + "条数据,文件保存在:" + saveFileName,
       this.title);

posted @ 2008-10-22 07:46  Daniel_Lu  阅读(359)  评论(0编辑  收藏  举报