C#學習筆記 ODBC 操作Excel

1,ODBC->開放數據庫連接(Open Database Connectivity,ODBC)是微軟公司開放服務結構(WOSA,Windows Open Services Architecture)中有關數據庫的一個組成部分,它建立了一組規範,並提供了一組對數據庫訪問的標準API(應用程序編程接口)

2,檢查ODBC-Excel驅動程序的安裝:控制面板->管理工具->數據源(ODBC)->驅動程序
(類似Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb))
注:如果找不到Excel的驅動程序->根據對應位數的系統安裝對應位數的Office(建議安裝Office2007以上的版本),會自動添加Excel的驅動程序。

3,在項目文件引用中添加Microsoft.Office.Interop.Excel.dll的引用(需安裝Office)

using Microsoft.Office.Interop.Excel

4,創建Excel文件,這裏我採用Microsoft.Office.Interop.Excel.dll中的方法來創建

object Nothing = System.Reflection.Missing.Value;
var app = new Microsoft.Office.Interop.Excel.Application();  //注意:將Microsoft.Office.Interop.Excel.dll的屬性“嵌入互操作類型”改爲false,否則會報錯
app.Visible = false;  
Microsoft.Office.Interop.Excel.Workbook workBook = app.Workbooks.Add(Nothing);  //工作薄
Microsoft.Office.Interop.Excel.Worksheet worksheet =(Microsoft.Office.Interop.Excel.Worksheet)workBook.Sheets[1];//工作表格
worksheet.Name = "Sheet1";//表格名稱

worksheet.Cells[1, 1]="ID";//表格的列名
worksheet.Cells[1, 2]="Name";//表格的列名
worksheet.Cells[1, 3]="Age";//表格的列名

worksheet.SaveAs(filePath+fileName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing);  //保存
workBook.Close(false, Type.Missing, Type.Missing);  //工作薄關閉
app.Quit(); //Excel程序退出

5,通過ODBC執行SQL語句來操作Excel(Select)

string strConn = @"Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};ReadOnly=False;Dbq=";//Driver驅動程序,ReadOnly=False必須有,否則插入數據會報錯,Dbq
strConn += filePath + fileName;  //完整的文件路徑+文件名(包括擴展名(類型))
System.Data.Odbc.OdbcConnection odbcConn = new System.Data.Odbc.OdbcConnection(strConn);//ODBC連接
try
{
     odbcConn.Open();//打開連接
     string sSQL="select * form [Sheet1$]";//注意格式,SQL語句查詢表格所有的數據
     System.Data.Odbc.OdbcCommand comm = new System.Data.Odbc.OdbcCommand(sSQL, odbcConn);//初始化ODBC命令
     comm.ExecuteNonQuery();//執行SQL語句
     if (comm != null)
     {
         comm.Dispose();
     }      
     if (odbcConn != null)
     {
         odbcConn.Close();
     }
 }
 catch (Exception excp)
 {
     if (odbcConn != null)
     {
         odbcConn.Close();
     }
 }

6,通過ODBC執行SQL語句來操作Excel(Insert)

  string strConn = @"Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};ReadOnly=False;Dbq=";
strConn += filePath + fileName;                                                        
System.Data.Odbc.OdbcConnection odbcConn = new System.Data.Odbc.OdbcConnection(strConn);//建立連接
try
{
odbcConn.Open();//連接打開
string strSql = "insert into [Sheet1$] (A,B,C)Values('F','T','Q')"; 
//SQL插入語句1: insert into 表格名稱(列名1,列名2,列名3...)Values(‘列值1’,'列值2','列值3',...)
System.Data.Odbc.OdbcCommand comm = new System.Data.Odbc.OdbcCommand(strSql, odbcConn);
comm.ExecuteNonQuery();
if (comm != null)
{
    comm.Dispose();
}
if (odbcConn != null)
{
    odbcConn.Close();
}
}
catch (Exception excp)
{
if (odbcConn != null)
{
    odbcConn.Close();
}
}

7,通過ODBC執行SQL語句來操作Excel(Update)

System.Data.DataTable dtExcel = new System.Data.DataTable();//表格
string strConn = @"Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};Dbq=";
strConn += filePath + fileName + ";";       

System.Data.Odbc.OdbcConnection odbcConn = new System.Data.Odbc.OdbcConnection(strConn);
try
{
    odbcConn.Open();
    string strSql = "update [Sheet1$] set A='FF',B='TT' where A='F' And B='T'";
    //SQL更新語句1:update 表格名 set 字段=值,字段=值,.... where 條件
    System.Data.Odbc.OdbcCommand comm = new System.Data.Odbc.OdbcCommand(strSql, odbcConn);
    comm.ExecuteNonQuery();
    if (odbcConn != null)
    {
        odbcConn.Close();
    }
}
catch (Exception excp)
{
    if (odbcConn != null)
    {
        odbcConn.Close();
    }
}

異常1:找不到數據源或者沒有指定默認驅動程序:
解決辦法:
1)檢查ODBC驅動程序是否有Excel的驅動(安裝Office,注意Office的安裝位數和操作系統的位數對應,x86安裝x86,x64安裝x64)

2)檢查項目文件的屬性->生成->目標平臺->x86/x64(對應系統的位數)

3)檢查連接語句是否正確

4)異常信息:ERROR [HY000] [Microsoft][ODBC Excel Driver] 操作必須使用一個可更新的查詢。
ODBC連接字符串Driver={Microsoft Excel Driver (.xls, .xlsx, .xlsm, .xlsb)};Dbq=C:\Users\Administrator\Desktop\2.xlsx;HDR=yes;IMEX=1
ODBC操作字符串insert into [Sheet1$] (F1,F2,F3) values (9,45,4)

解決辦法:
將ODBC連接字符串追加一個選項:ReadOnly=False
ODBC連接字符串Driver={Microsoft Excel Driver (.xls, .xlsx, .xlsm, .xlsb)};ReadOnly=False;Dbq=C:\Users\Administrator\Desktop\2.xlsx;HDR=yes;IMEX=1

5)異常信息:ERROR [HY000] [Microsoft][ODBC Excel Driver] 外部表不是預期的格式。
ERROR [01S00] [Microsoft][ODBC Excel Driver]非法的連接串屬性 HDR
ERROR [01S00] [Microsoft][ODBC Excel Driver]非法的連接串屬性 IMEX
…….
ERROR [HY000] [Microsoft][ODBC Excel Driver] 外部表不是預期的格式。
ODBC連接字符串Driver={Microsoft Excel Driver (.xls, .xlsx, .xlsm, .xlsb)};ReadOnly=False;Dbq=C:\Users\Administrator\Desktop\2.xlsx;HDR=yes;IMEX=2
ODBC操作字符串insert into [Sheet1$] (F1,F2,F3) values (10,14,14)

解決辦法:
將ODBC連接字符串修改選項:IMEX=1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章