[oledb] SQL Server Compact 沒有出現在 OLEDB 提供者清單中

話說,我有個現場設備拆回來維修,我打算把資料庫備份出來後,遷移到現場替代機上。

大部分情況,我會使用 Access ,但是這個現場資料庫用 SQL Server Express 2014 ,超過 255 欄,所以需要尋找替代方案。
首先我想起 SQL Server Compact Edition (SQL CE) ,因為幾年前在用 SQL Server Express 2008 R2 時,內建支援 Compact ,而且在 Visual Studio 2010 也可以用,也可以內建支援。

一測試才發現,大糗。

SQL Server 2012 / Visual Studio 2012 以後版本預設都沒支援。 Visual Studio 2010 使用 SQL CE 的說明文件:
https://msdn.microsoft.com/zh-tw/library/gg606540.aspx

而且最慘的是 SQL CE 沒出現在 oledb providers (提供者) 清單中,根本不知道怎樣玩下去。

這是 「SQL Server 2014 匯入和匯出資料 (64 位元)」 找不到 SQL CE 的畫面:

SQL Server 2014 匯入和匯出資料 (64 位元)

SQL Server 2014 匯入和匯出資料 (64 位元)

 

這是 Visual Studio 2015 IDE 找不到 SQL CE 的畫面:

Visual Studio 2015 IDE

Visual Studio 2015 IDE

這是開新的 udl 找不到 SQL CE 的畫面:

開新的 udl

開新的 udl

當然,這邊先說一下,為啥用 oledb 的原因,就是使用 oledb 不綁 .Net framework 版本。SQL CE 有 2005/3.0/3.5/4.0 不同版本,各版本還有出 Service Pack ,但是使用不同版本相對的 .Net framework 也要對應相對版本,2005 就對應到 .Net framework 2.0 ,所以還是採用 oledb 彈性較大。
引用 MSDN 相關說明:「除非您使用 OLEDB 資料提供者,否則需要 Microsoft.NET Framework 4 或更新版本才能安裝 SQL Server Compact 4.0。」
https://technet.microsoft.com/zh-tw/library/bb190958%28v=sql.110%29.aspx

首先,先用 .Net framework 內建的 OleDbEnumerator 列舉 oledb 的提供者,沒找到 SQL CE:
https://msdn.microsoft.com/zh-tw/library/system.data.oledb.oledbenumerator.aspx

OleDbEnumerator 列舉下拉式選單

OleDbEnumerator 列舉下拉式選單

註:圖中下拉式選單是用 OleDbEnumerator 傳回的 SOURCES_NAME – SOURCES_DESCRIPTION 格式顯示

由於找不到 SQL CE ,我在這個網站下載了 x86/x64 的工具來查看看:
http://www.sqledit.com/odbc/oledb-provlist.html

x86 的畫面

x86 的畫面

x86 的畫面

x64 的畫面

x64 的畫面

x64 的畫面

在 google 上翻找了兩天,最後是我以前在 2010 曾經存了一個 oledb.reg 在 SQL CE 3.5 SP2 目錄下,裡面有 OLE DB Provider ,從這關鍵字再回頭 google 。

先找到 Connect 上有人回報的問題,微軟簡單說明說,因為 SQL CE 在 oledb 支援不完整,所以後來沒列在 oledb 提供者清單上:
https://connect.microsoft.com/SQLServer/feedback/details/546133/sql-server-compact-edition-3-5-oledb-driver-not-listed

在找到相關討論,列出比較重要的兩篇:
http://coding.derkeiler.com/Archive/Delphi/borland.public.delphi.database.ado/2008-02/msg00080.html
https://social.msdn.microsoft.com/Forums/sqlserver/en-US/cc6db680-1d33-4c9b-8b67-9334b3383904

在開發機測試一下,分別做了兩個註冊資訊檔案匯入:
oledbSqlCe35.reg for SQL CE 3.5 SP2


Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\CLSID\{F49C559D-E9E5-467C-8C18-3326AAE4EBCC}\OLE DB Provider]
@="Microsoft SQL Server Compact OLE DB Provider 3.5"

oledbSqlCe40.reg for SQL CE 4.0 SP1


Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\CLSID\{2006C53A-C915-41EA-BAA9-9EAB3A1FBF97}]
@="Microsoft.SQLSERVER.CE.OLEDB.4.0"

[HKEY_CLASSES_ROOT\CLSID\{2006C53A-C915-41EA-BAA9-9EAB3A1FBF97}\OLE DB Provider]
@="Microsoft SQL Server Compact OLE DB Provider 4.0"

為避免兩個版本混淆,建議 OLE DB Provider 下面字串明確列出版本,例如上面的 3.5 或是 4.0 。
另外 SQL CE 4.0 在原始預設註冊資訊為:

[HKEY_CLASSES_ROOT\CLSID\{2006C53A-C915-41EA-BAA9-9EAB3A1FBF97}]
@="Microsoft SQL Server Compact OLE DB Provider for Windows"

這邊建議依照我提供的修改,因為大部分軟體都會從這抓 oledb 的名稱,若是這邊不改,很多軟體連線字串不會組成 Microsoft.SQLSERVER.CE.OLEDB.4.0 ,就變成不能用。

在 x64 的電腦上,除了上面註冊資訊檔修改外,另外需要針對 x86 再修改,否則 x86 程式在 x64 作業系統上仍然會撈不到 oledb 提供者。

SQL CE 3.5


Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{F49C559D-E9E5-467C-8C18-3326AAE4EBCC}\OLE DB Provider]
@="Microsoft SQL Server Compact OLE DB Provider 3.5"

SQL CE 4.0


Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{2006C53A-C915-41EA-BAA9-9EAB3A1FBF97}]
@="Microsoft.SQLSERVER.CE.OLEDB.4.0"

[HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{2006C53A-C915-41EA-BAA9-9EAB3A1FBF97}\OLE DB Provider]
@="Microsoft SQL Server Compact OLE DB Provider 4.0"

匯入完成後,就可以正確找到 oledb 並進行操作了:
這是 「SQL Server 2014 匯入和匯出資料 (32 位元)」 找到 SQL CE 的畫面:

SQL Server 2014 匯入和匯出資料 (32 位元)

SQL Server 2014 匯入和匯出資料 (32 位元)

這是 「SQL Server 2014 匯入和匯出資料 (64 位元)」 找到 SQL CE 的畫面:

SQL Server 2014 匯入和匯出資料 (64 位元)

SQL Server 2014 匯入和匯出資料 (64 位元)

這是 Visual Studio 2015 IDE 找到 SQL CE 並開啟載入的畫面:

Visual Studio 2015 IDE

Visual Studio 2015 IDE

這是開新的 udl 找到 SQL CE 的畫面:

開新的 udl

開新的 udl

最後回頭用下載的工具來測,也可以正常找到 SQL CE 了:
x86 的畫面

x86 的畫面

x86 的畫面

x64 的畫面

x64 的畫面

x64 的畫面

註:我在有安裝 SQL Server 2014 / Visual Studio 2015 @Win81 x64/Win2012r2 x64 下,已有 SQL CE 4.0 ,不確定是安裝 MSSQL / VS 自己加進來還是 Win81/2012r2 內建,因為在控制台新增移除程式清單上沒看到。

[2016/10/03 補充]

VS2015 的 SSDT 更新,把 「SQL Server 2016 匯入和匯出資料 (32 位元)」也掛進來了,測了一下也可以正常抓到 SQLCE35/SQLCE40 的 oledb 清單,不過繁中做一半,上半部介面繁中,下半部按鈕全部英文~

SQL Server 2016 匯入和匯出資料 (32 位元)

mssql_2016_importexport_32_new

SQL Server 2016 匯入和匯出資料 (32 位元)

 

 

Categories: 自用整理, 工作點滴, 技術分享 | 2 則迴響

文章導覽

2 thoughts on “[oledb] SQL Server Compact 沒有出現在 OLEDB 提供者清單中

  1. 通告: [Windows] 在檔案總管滑鼠右鍵加入 命令提示字元 | 鄭子璉

  2. 通告: SQL Server Compact on framework 4 and oledb provider | PipisCrew Official Homepage

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s

在 WordPress.com 建立免費網站或網誌.

%d 位部落客按了讚: