Excel到資料庫的匯入三部曲

2021-09-30 21:45:55 字數 4252 閱讀 5162

前段時間考試系統要新新增乙個功能,要把學生表的資訊批量匯入,也就是需要從excel中匯入到資料庫表,小女子不才,找了好長時間才解決。

一、如果表是沒有建立的,我們需要在資料庫表中重新建立乙個表盛放excel資料的時候:

sql

server中的匯入語句:

select * intocity2 from opendatasource( 'micros  前段時間考試系統要新新增乙個功能,要把學生表的資訊批量匯入,也就是需要從excel中匯入到資料庫表,小女子不才,找了好長時間才解決。

一、如果表是沒有建立的,我們需要在資料庫表中重新建立乙個表盛放excel資料的時候:

sql

server中的匯入語句:

select * intocity2 from opendatasource( 'microsoft.jet.oledb.4.0', 'datasource="f:\test.xls";user id=admin;password=;extendedproperties=excel 5.0')...[sheet1$]

這裡需要注意的是,如果直接寫這個語句,會出現這樣的錯誤:

sql server 阻止了對元件'ad hocdistributed queries' 的statement'openrowset/opendatasource' 的訪問,因為此元件已作為此伺服器安全配置的一部分而被關閉。系統管理員可以通過使用sp_configure 啟用'ad hoc distributed queries'。有關啟用'ad hocdistributed queries' 的詳細資訊,請參閱sql server 聯機叢書中的"外圍應用配置器"。

所以,我們這裡需要啟動服務:

啟動語句為:

execsp_configure 'show advanced options',1

reconfigure

execsp_configure 'ad hoc distributed queries',1

reconfigure

當然,用完之後要記得關閉:

關閉語句為:

execsp_configure 'ad hoc distributed queries',0

reconfigure

execsp_configure 'show advanced options',0

reconfigure

因為考試系統是基於asp.net實現的,所以,一下是asp.net的實現**,需要注意的是,因為語句中存在」,\等特殊符號,所以,我們需要使用轉義字元來使這些特殊符號成為字串型別,這裡是一些常用的轉義字元符號:

protectedvoid btntolaad_click(object sender, eventargs e)

這樣,資料庫中會建立乙個city表,來儲存excel中的資料。

二、將excel表匯入到已經存在的資料庫表

這裡需要注意的是,excel表中的資料必須要和資料庫表中的資料一致

比如,如果資料庫表的字段為

則相應的excel的表字段為:

這裡需要注意的是,如果直接寫這個語句,會出現這樣的錯誤:

sql server 阻止了對元件'ad hocdistributed queries' 的statement'openrowset/opendatasource' 的訪問,因為此元件已作為此伺服器安全配置的一部分而被關閉。系統管理員可以通過使用sp_configure 啟用'ad hoc distributed queries'。有關啟用'ad hocdistributed queries' 的詳細資訊,請參閱sql server 聯機叢書中的"外圍應用配置器"。

所以,我們這裡需要啟動服務:

啟動語句為:

execsp_configure 'show advanced options',1

reconfigure

execsp_configure 'ad hoc distributed queries',1

reconfigure

當然,用完之後要記得關閉:

關閉語句為:

execsp_configure 'ad hoc distributed queries',0

reconfigure

execsp_configure 'show advanced options',0

reconfigure

因為考試系統是基於asp.net實現的,所以,一下是asp.net的實現**,需要注意的是,因為語句中存在」,\等特殊符號,所以,我們需要使用轉義字元來使這些特殊符號成為字串型別,這裡是一些常用的轉義字元符號:

protectedvoid btntolaad_click(object sender, eventargs e)

這樣,資料庫中會建立乙個city表,來儲存excel中的資料。

二、將excel表匯入到已經存在的資料庫表

這裡需要注意的是,excel表中的資料必須要和資料庫表中的資料一致

比如,如果資料庫表的字段為

則相應的excel的表字段為:

這裡同樣需要開啟服務,和第一種的方式一樣。

三、既然已經存在的表,一般都會存在一些設定,比如說主鍵、外來鍵或者是其他,如果主鍵或者外來鍵衝突,就會出現匯入失敗的問題。所以,我們需要對excel表中的資料進行判斷。

則先需要把資料匯入到datatable中

protected void btnleadingin_click(objectsender, eventargs e)

}public static datatablecreateexceldatasource(string url)

catch (exception ex)

finally}

當然,我感覺我這裡把datatable中的資料一條一條的取出來判斷至少是非常耗時間耗記憶體的,而且這裡最好加上回滾事物,因為在我們匯入過程中會經常出現這樣活那樣的問題,採用事物,可以在出錯的時候把資料回滾到沒有匯入之前的狀態,防止意外事件發生,這裡我就不往上加了。

以上是三種是我們實現了的excel匯入,當然,我想方法還不止這些,當然,除了匯入,還有的就是從資料庫表匯出到excel表中,因為我做的那部分系統沒有涉及到,所以這裡就不再提了。

下面說一下我在解決的過程中繞的彎路:

一、我沒有把匯入資料庫的種種做法弄清楚,比如是直接建立表呢還是在已經存在的表中匯入,所以以至於剛開始總是找不到合適的方法。

二、在後來的查詢過程中,我發現我有乙個很大的毛病,就是我的關鍵字是在「asp.net中、、、、、」,其實,既然是往資料庫中匯入,asp.net只是乙個執行一下,所以,因為有了關鍵字的約束,查出來的資料少不說,而且還形成了一種思維定式,除了asp.net之外的其他都一概不看。

三、對查不來的資訊不能加以理解,只是能用就用,不能用就換,也就是我因為轉義字串那一塊弄了很長時間的原因,因為當我們在sql執行查詢語句沒有錯誤的時候,需要把它放在asp.net中執行,因為這些語句需要string字串來顯示,而這個執行語句中有包含引號,所以需要轉義字元,在解決引號的問題之後,我發現還是不正確,一直折騰了好久才發現是路徑f:\test.xls中「\t「是table的轉義字元,所以這裡需要兩個\來轉義\,這就是應該寫成這樣「f:\\test.xls」,而當我寫成這樣的時候,我才想起來,其實最開始查詢的時候所有的**都是這樣的,只是那些我沒用上,當時也沒多想,以為路徑就應該是這樣的,最終導致還繼續在這個上面栽跟頭。

***********************************=分割線******************************==

《曾國藩》三部曲的感慨

利用乙個半月的閒暇時間,將 曾國藩 三部曲看完。合上書本的一剎那,想哭。這本書,從曾國藩建湘勇述起,講述了曾國藩的官場生涯。剛開始讀時,並不覺得愛不釋手,只是喜歡這歷史,於是倒也樂讀。漸漸的,對於曾國藩了解的越來越多,竟也想一究其一生之所做為,愛不釋手。太平天國亂於天下,曾國藩因此在湖北招募兵勇,以...

資料中心進化三部曲

資訊時代的到來,改變了我們的工作和生活方式,讓我們從未像現在這樣如此依賴於各種資訊,資訊科技也得到了蓬勃發展。現如今,資料中心已經成為了資訊科技高速發展的最佳實驗田,幾乎所有新的資訊科技都最終要在資料中心落地,才算有意義,這間接地帶動了資料中心的進步。雖然我們叫了幾十年的資料機房,一下子換了乙個名稱...

認識網路營銷的三部曲

認識網路營銷的三部曲 一 網路營銷是不是傳銷 在問答 中,我們可以看到許多人在提問,網路營銷是不是傳銷 網路營銷不是傳銷。他們將網路營銷和傳銷混為一談,傳銷的網路營銷是指的人際網路營銷,是利用人際關係進行的產品銷售。而網路營銷是指網際網路的營銷。據 禁止傳銷條例 的定義,傳銷是指組織者或者經營者發展...