Oracle简单导出Excel

本文介绍如何使用C#进行数据库操作,并将数据导出为Excel文件,涉及Oracle数据库连接、ADO.NET数据访问和Excel文件操作。

1.新建一个工程,需要添加引用Microsoft.Office.Interop.Excel.dll

2.usingSystem.Data;
   usingSystem.Data.OleDb;

  还有个是Sys.confi...

3.数据库操作的类:

using System.Data.OracleClient;

public class DataBaseHelper 
 { 
    public static DataTable ExecuterQuery(string connectionString, string commandSql) 
    { 
        DataTable dataTable = new DataTable(); 
        try 
        { 
          using (OracleConnection oracleConnection =  
          new OracleConnection(connectionString)) 
          { 
            oracleConnection.Open(); 
 
            using (OracleDataAdapter oracleDataAdapter =  
            new OracleDataAdapter(commandSql,oracleConnection)) 
                { 
                   oracleDataAdapter.Fill(dataTable); 
                } 
 
                oracleConnection.Close(); 
          } 
        } 
        catch 
        { 
          return null; 
        } 
     return dataTable; 
    } 
 } 

public class DataBaseDao 

   public static DataTable GetDataBaseTable() 
   { 

    ///如果有APP.config的话,就是

     string strConn        =System.Configuration.ConfigurationManager.ConnectionStrings["DTASDataBase"].ConnectionString.Replace(";Unicode=True", "");

      //string sql = "SELECT * FROM table"; 

     return DataBaseHelper.ExecuterQuery(strConn, sql); 
      //return DataBaseHelper.ExecuterQuery("User ID=downsoft;Password=sys;Data Source=orcl", sql); 
   } 

 导出Excel的类:

public class DataChangeExcel 

     /// <summary> 
     /// 数据库转为excel表格 
     /// </summary> 
     /// <param name="dataTable">数据库数据</param> 
     /// <param name="SaveFile">导出的excel文件</param> 
        public static void DataSetToExcel(DataTable dataTable, string SaveFile) 
        { 
            Excel.Application excel; 
            Excel._Workbook workBook; 
            Excel._Worksheet workSheet; 
            object misValue = System.Reflection.Missing.Value; 
            excel = new Excel.ApplicationClass(); 
            workBook = excel.Workbooks.Add(misValue); 
            workSheet = (Excel._Worksheet)workBook.ActiveSheet; 
            int rowIndex = 1; 
            int colIndex = 0; 
            //取得标题 
            foreach (DataColumn col in dataTable.Columns) 
            { 
                colIndex++; 
                excel.Cells[1, colIndex] = col.ColumnName; 
            } 
            //取得表格中的数据 
            foreach (DataRow row in dataTable.Rows) 
            { 
                rowIndex++; 
                colIndex = 0; 
                foreach (DataColumn col in dataTable.Columns) 
                { 
                   colIndex++; 
                   excel.Cells[rowIndex, colIndex] =  
                   row[col.ColumnName].ToString().Trim(); 
                   //设置表格内容居中对齐 
                   workSheet.get_Range(excel.Cells[rowIndex, colIndex],     
                   excel.Cells[rowIndex, colIndex]).HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter; 
                } 
            } 
           excel.Visible = false; 
           workBook.SaveAs(SaveFile, Excel.XlFileFormat.xlWorkbookNormal, misValue,  
           misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive,    
           misValue, misValue, misValue, misValue, misValue); 
           dataTable = null; 
           workBook.Close(true, misValue, misValue); 
           excel.Quit(); 
           PublicMethod.Kill(excel);//调用kill当前excel进程 
           releaseObject(workSheet); 
           releaseObject(workBook); 
           releaseObject(excel); 
        } 
        private static void releaseObject(object obj) 
        { 
            try 
            { 
                System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); 
                obj = null; 
            } 
            catch 
            { 
                obj = null; 
            } 
            finally 
            { 
                GC.Collect(); 
            } 
        } 
 } 

关闭进程的类:

public class PublicMethod 

   [DllImport("User32.dll", CharSet = CharSet.Auto)] 
   public static extern int GetWindowThreadProcessId(IntPtr hwnd, out int ID); 
   public static void Kill(Microsoft.Office.Interop.Excel.Application excel) 
   { 
       try 
       { 
         IntPtr t = new IntPtr(excel.Hwnd); 
         int k = 0; 
         GetWindowThreadProcessId(t, out k); 
         System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(k);    
         p.Kill();  
        } 
        catch 
        { } 
   } 

最后在窗体结构中加一个按钮,点击事件

  private void button1_Click(object sender, EventArgs e)
        {
            DataChangeExcel.DataSetToExcel(DataBaseDao.GetDataBaseTable(),@"F:\outputDataBase.xls"); 
        }

如果出现

 OledbConnection (是否缺少using指令或程序集引用?)  记得加应用。

还有就是可能出现32位,和64位的冲突问题,在需要的启动项目的属性里面的生成那里设置成X86或则X64即可


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值