日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

将Excel数据导入SQL Server数据库

發布時間:2025/7/14 数据库 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 将Excel数据导入SQL Server数据库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

遇到了一個需求,需要將Excel中的數據導入SQL Server數據庫中,當然,不是使用企業管理器之類的直接導入數據的那種,而是要做到程序中。本來我最初的考慮是將Excel中的數據讀到dataset中,然后分別插入到數據庫中。

從Excel中讀取數據并不太難,簡單來說就是下面的幾句代碼而已:

?

Code
?public?DataSet?ExcelToDataset(string?path)
????????{
????????????
try
????????????{
string?conStringExcel?=?@"Provider=Microsoft.Jet.OLEDB.4.0;Data?Source="?+?path?+?";Extended?Properties=\"Excel?8.0;HDR=NO;\"";
string?sql?=?"select?*?from?[Sheet1$]";
????????????????DataSet?ds?
=?new?DataSet();
????????????????OleDbDataAdapter?da?
=?new?OleDbDataAdapter(sql,?conStringExcel);
????????????????da.Fill(ds);
????????????????
return?ds;
????????????}
????????????
catch(Exception?ex)
????????????{
????????????????
throw?ex;
????????????}
????????}

path為Excel的路徑。

?

像其他的情況,比如多個sheet啊,工作區域啊什么的,在園內查一下就可以了,并不太難。

不過考慮到這樣有些麻煩,而且基本上Excel的格式和sheet是固定的,所以能不能使用別的方法解決呢?

在園內查了一下,園內的以為大神給出了一個存儲過程,使用的是連接服務器的方式,基本代碼如下:

?

Code
ALTER?PROCEDURE?[dbo].[pro_xls]
@sheetName?varchar(50),--Excel中sheet名
@path?varchar(2000)--Excel的路徑
as

/**//*
sp_addlinkedserver--創建一個鏈接的服務器,使其允許對分布式的、針對?OLE?DB?數據源的異類查詢進行訪問
@server='USER_LIST',--被訪問的服務器別名
@srvproduct='USER_LIST',--要添加為鏈接服務器的?OLE?DB?數據源的產品名稱
@datasrc='d:\file\Users.xls'???--要訪問的服務器
*/
EXEC?sp_addlinkedserver?@server='server',?@srvproduct='Excel',?@provider='Microsoft.Jet.OLEDB.4.0',?@datasrc=@path,?@provstr='Excel?8.0;HDR=no;IMEX=1;'
EXEC?sp_addlinkedsrvlogin?'server','false'
/**//*
當?SET?XACT_ABORT?為?ON?時,如果執行?Transact-SQL?語句產生運行時錯誤,則整個事務將終止并回滾。?
當?SET?XACT_ABORT?為?OFF?時,有時只回滾產生錯誤的?Transact-SQL?語句,而事務將繼續進行處理。如果錯誤很嚴重,那么即使?SET?XACT_ABORT?為?OFF,也可能回滾整個事務。
編譯錯誤(如語法錯誤)不受?SET?XACT_ABORT?的影響。
*/
SET?XACT_ABORT?ON

BEGIN?DISTRIBUTED?TRAN

????
insert?into?test?(testName,testPwd,Istest)?select?*?from?[@sheetName$]
IF?@@ERROR?>?0
????
GOTO?ChkRollBack

ChkRollBack:
IF?@@ERROR?>?0
????
ROLLBACK?TRAN
ELSE
????
COMMIT?TRAN

SET?XACT_ABORT?OFF
EXEC?sp_dropserver?'server',null

上面的代碼是拿的園內大神的并自己修改的,不過貌似還是有點問題,主要是對sp_addlinkedserver之流的存儲過程不太明白,幾個參數不知道是做什么的。

?

恩,有點頭疼了。

結果又發現了一種方式,貌似叫做即席查詢的東西,代碼寫起來就簡單了:

?

Code
--如果是導入數據到現有表,則采用

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$)


?

分布式查詢傳送門

?


我這里只是起到一個拋磚引玉的作用,希望各位園內大神不吝賜教。

轉載于:https://www.cnblogs.com/fengyishou/archive/2009/05/06/1450380.html

總結

以上是生活随笔為你收集整理的将Excel数据导入SQL Server数据库的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。