2012年11月10日 星期六

SQL Server - 文字檔控制

        最近接到一個新的需求,需要將表格中的資料輸出到文字檔案中,方法其實有很多種,如透過 CmdShell 來進行,但可能會有資訊安全的疑慮,所以建議可以透過連結伺服器 (Linked Server),但問題來了,在SQL Server 2008R2上,由於是64位元的應用程式,所以當要連線到文字檔如(*.txt、*.csv)或Office的檔案,如Excel時,就會發生下列的錯誤,所以本篇就來介紹解決這個問題。

錯誤訊息:
OLE DB provider "MSDASQL" for linked server "(null)" returned message "[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified".
Msg 7303, Level 16, State 1, Line 1
Cannot initialize the data source object of OLE DB provider "MSDASQL" for linked server "(null)".

連結伺服器 "(null)" 的 OLE DB 提供者 "MSDASQL" 傳回訊息 "[Microsoft][ODBC 驅動程式管理員] 找不到資料來源名稱且未指定預設的驅動程式"。
訊息 7303,層級 16,狀態 1,行 1
無法初始化連結伺服器 "(null)" 的 OLE DB 提供者 "MSDASQL" 的資料來源物件。


接下來我們就來介紹如何透過連結伺服器進行:

1、 建立連結伺服器
1-1 開啟Management Studio,點選[伺服器物件] -> [連結的伺服器] -> [新增連結的伺服器]




1-2 輸入連結的資訊。 下列資訊中資料來源主要是指定您的檔案存放位置,本範例我是放在C:\LogFolder下面。


1-3 建立完成後,您就可以在連結的伺服器下看到剛剛新增的連結伺服器

2、安裝 Microsoft.ACE.OLEDB.12.0 的驅動程式與設定。
2-1 由於在SQL Server 64位元中如果要去存取32位元的應用程式時,會發生問題,請先進行下列檔案的安裝。

2-2 下載安裝Microsoft.ACE.OLEDB.12.0
Microsoft Access Database Engine 2010 Redistributable
http://www.microsoft.com/en-us/download/details.aspx?id=13255


2-3 安裝的時候,如果你的機器上已有安裝Office 32位元的程式時,就會遇到下列的問題,由於無法同時安裝32與64位元的應用程式與同一台上,所以請先移除後再安裝即可。

錯誤訊息:
You cannot install the 64-bit version of Microsoft Access Database Engine 2010 because you currently have 32-bit office products installed. If you want to install 64-bit Microsoft Access Database Engine 2010, you will first need to remove the 32-bit installation of Office products. After uninstalling the following product(s), rerun setup in order to install 64-bit version of Microsoft Access Database Engine 2010:


2-4 安裝完成後,請重新啟動電腦。

2-5 安裝完成後,您如果直接使用,然會遇到下列的問題,必須啟用下列的設定後,您才可以讓此驅動程式運作。

EXEC
master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'AllowInProcess', 1
GO


錯誤訊息:

訊息 7399,層級 16,狀態 1,行 1
連結伺服器 "LOGMANAGER" 的 OLE DB 提供者 "Microsoft.ACE.OLEDB.12.0" 報告了錯誤。提供者並未給予任何關於錯誤的資訊。
訊息 7330,層級 16,狀態 2,行 1
無法從連結伺服器 "LOGMANAGER" 的 OLE DB 提供者 "Microsoft.ACE.OLEDB.12.0" 提取資料列。

3、使用連結伺服器進行測試。

3-1 接下來請在 C:\LogFolder 目錄下新增一個檔案,本範例名稱為test_doc.txt。
3-2 透過下列的方式即可將進行文字檔的新增與查詢

3-2-1 查詢文字檔:
select * from LOGMANAGER...test_doc#txt

3-2-2 新增文字到文字檔中:
insert into LOGMANAGER...test_doc#txt values('12345')

透過上述介紹的方式,你就可以在SQL Server中進行文字檔的控制,即可整合應用。


參考連結:
How to connect to file-based data sources (Microsoft Access , Microsoft Excel and Text files ) from a 64 bit application
http://blogs.msdn.com/b/sqlblog/archive/2009/12/29/how-to-connect-to-file-based-data-sources-microsoft-access-microsoft-excel-and-text-files-from-a-64-bit-application.aspx

關鍵字:SQL ServerLinked Server連結伺服器Microsoft.ACE.OLEDBMicrosoft Access Database EngineMSDASQL

沒有留言:

張貼留言