從EXCEL匯入資料到SQL SERVER

iSQlServer發表於2009-02-02

介紹兩種途徑將資料從EXCEL中匯入到SQL SERVER。

一、        在程式中,用ADO.NET。程式碼如下:

 

//連線串

string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" + [EXCEL檔案,含路徑] + ";";

OleDbConnection conn = new OleDbConnection(strConn);

conn.Open();

         

DataTable dtSchema = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,new object[] {null, null, null, "TABLE"});

DataSet ds = new DataSet();

//一個EXCEL檔案可能有多個工作表,遍歷之

foreach( DataRow dr in dtSchema.Rows )

{

   string table = dr["TABLE_NAME"].ToString();

   string strExcel = "SELECT * FROM [" + table + "]";

   ds.Tables.Add(table);

 

   OleDbDataAdapter myCommand = new OleDbDataAdapter(strExcel,conn);

   myCommand.Fill(ds,table);

}

 

conn.Close();

 

這樣,讀取出來的資料就藏在DataSet裡了。

採用這種方式,資料庫所在機器不必裝有EXCEL。

 

二、        在查詢分析器裡,直接寫SQL語句:

如果是匯入資料到現有表,則採用

INSERT INTO 表 SELECT * FROM OPENROWSET('MICROSOFT.JET.OLEDB.4.0'

,'Excel 5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$)

的形式

如果是匯入資料並新增表,則採用

SELECT * INTO 表 FROM OPENROWSET('MICROSOFT.JET.OLEDB.4.0'

,'Excel 5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$)

的形式。

 

以上語句是將EXCEL檔案裡SHEET1工作表中所有的列都讀進來,如果只想導部分列,可以

INSERT INTO 表(a1,a2,a3) SELECT a1,a2,a3 FROM OPENROWSET('MICROSOFT.JET.OLEDB.4.0'

,'Excel 5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$)

 

其實可以將OPENROWSET('MICROSOFT.JET.OLEDB.4.0'

,'Excel 5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$)當成一個表,例如我就寫過這樣一個句子:

 

INSERT INTO eval_channel_employee(channel,employee_id)

SELECT CASE a.渠道 WHEN 'DIY' THEN 1 WHEN 'RDC' THEN 0 WHEN 'KCM' THEN 2 ELSE 3 END

,b.id FROM

OPENROWSET('MICROSOFT.JET.OLEDB.4.0'

,'Excel 5.0;HDR=YES;DATABASE=c:\temp\name.xls',sheet1$) AS a,pers_employee b

WHERE a.員工編碼=b.code

 

不管是哪種方式,哪種途徑,系統都會預設將第一行上的內容作為欄位名。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-545029/,如需轉載,請註明出處,否則將追究法律責任。

相關文章