none
存取本機資料庫 RRS feed

  • 問題

  • 我遇到以下的問題:

    安裝 SQL Server Compact 3.5 SP1 Device Runtime 之後,所有參考 System.Data.SqlServerCe.dll 組件並由 Visual Studio 2008 SP1 或 Visual Studio 2008 建立的「智慧型裝置」專案,將不能來回開啟。這是因為 SQL Server Compact 3.5 SP1 (3.5.1.0) 和 SQL Server Compact 3.5 (3.5.0.0) 中的 System.Data.SqlServerCe.dll 組件版本不相同。下列清單描述可能的案例和解決方案:
    • 案例 1:
      首先,使用 Visual Studio 2008 建立「智慧型裝置」專案,並確認專案參考 System.Data.SqlServerCe.dll 組件。然後,安裝 Visual Studio 2008 SP1 和 SQL Server Compact 3.5 SP1 Device Runtime。
      最後,開啟並建立專案。建立專案時,會顯示下列錯誤:「此作業必須有 SQL Server Compact 3.5 的參考。此專案擁有的是不同版本的參考。請更新參考,然後再試一次。」原因是專案中參考的 System.Data.SqlServerCe.dll 版本,與電腦上出現的版本不同。
      要解決這個問題,先從 [檢視] 功能表的開啟 [方案總管]。按一下 [參考] 並選取 System.Data.SqlServerCe 組件。在 [屬性] 視窗中,將 [Specific Version] 屬性設定為 [False]。注意,使用 Visual Studio 2008 和 Visual Studio 2008 SP1 版本來回開啟此專案時,這個解決方案不需要更新 System.Data.SqlServerCe.dll 的組件版本。
    • 案例 2:
      首先,安裝 Visual Studio 2008 和 SQL Server Compact 3.5 Device Runtime。然後,開啟之前使用 Visual Studio 2008 SP1 和 SQL Server Compact 3.5 SP1 Device Runtime 建立的「智慧型裝置」專案。最後,建立專案。專案將會順利建立。不過,偵錯應用程式時,會顯示下列錯誤:「找不到 PInvoke DLL ‘sqlceme35.dll'」。這是因為專案有 3.5.1.0 版本的 System.Data.SqlServerCe.dll 本機副本,但是電腦上沒有包括 sqlceme35.dll 的相依原生檔案。
      要解決這個問題,先從 [檢視] 功能表的開啟 [方案總管]。按一下 [參考] 並選取 System.Data.SqlServerCe 組件。在 [屬性] 視窗中,將 [Copy Local] 屬性設定為 [False]。然後,從專案的本機資料夾移除 System.Data.SqlServerCe.dll 組件。按一下 [參考],選取 System.Data.SqlServerCe 組件,然後以滑鼠右鍵按一下 [移除]。再按一下 [參考],按一下滑鼠右鍵並選取 [加入參考]。在 [加入參考] 對話方塊中,按一下 [.NET] 索引標籤,從 [元件名稱] 清單選取 System.Data.SqlServerCe,然後按一下 [確定]。

    http://msdn.microsoft.com/zh-tw/library/aa983326.aspx

    我都按照上面去解了!
    可是還是會出現這樣的問題!

    而且,我另外寫了一支單純讀取本機資料庫的程式,就可以!
    原本的那支程式,也一樣的code,一樣的本機資料庫,但就會出現以上的訊息
    2009年5月31日 下午 04:25

解答

所有回覆

  • Hi,
    你原先舊的專案要升級到SqlCE 3.5 SP1的版本的話要將參考的組件(System.Data.SqlServerCE.dll)修改為SP1的版本;你可以在"方案總管"中,點選顯示所有檔案,之後在"參考"找到System.Data.SqlServerCE,之後再屬性視窗去看他參考的版本以及參考的位置,以我的電腦來說版本是3.5.1.0,參考位置是
    C:\Program Files\Microsoft SQL Server Compact Edition\v3.5\Devices\System.Data.SqlServerCe.dll

    你也要確定一下你是不是裝了sqlce 3.5 SP1,VS2008 SP1並沒有包含這部分,參考資料可以參考下面這篇
    http://bauann-makeit.blogspot.com/2008/12/vs2008-sql-compact-v35-sp1.html
    態度決定一切 ! - blog : http://bauann-makeit.blogspot.com/
    2009年6月1日 上午 05:58
    版主
  • Hi! Thank you your answer~
    相當有用~~~~

    我確認過我的是 sqlce 3.5 sp1

    但是 錯誤一直跑出來阿~"~
    現在跑出這個訊息

    無法載入SQL Server Compact DLL。請重新安裝SQL Server Compact [DLL NAME = sqlceqp35.dll]

    2009年6月1日 上午 08:53
  • Hi,
    有試過在你的裝置上重新安裝SqlCE 3.5 SP1的Runtime嗎?
    態度決定一切 ! - blog : http://bauann-makeit.blogspot.com/
    2009年6月1日 上午 09:11
    版主
  • 是在這個資料夾裏的 C:\Program Files\Microsoft SQL Server Compact Edition\v3.5\Devices\wce500\armv4i
    這三個檔案嗎? 要一起安裝對吧^^
    sqlce.dev.CHT.ppc.wce5.armv4i.CAB
    sqlce.ppc.wce5.armv4i.CAB
    sqlce.repl.ppc.wce5.armv4i.CAB

    我安裝過後~還是會出現@@"
    我的機器是 Hp iPAQ 212 (Mobile 6)
    2009年6月1日 下午 02:12
  • hi~~~
    我發現一件很弔詭的事情!!!!
    就是~~我後來再一開始進來的視窗Form1寫一個測試的本機資料庫讀取的程式

    類似以下這樣
            private void TEST()
            {

                try
                {
                    string connString;
                    string Path = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
                    connString = @"Data Source=" + Path + "\\AppDatabase.sdf;";
                    //connString = connString + "encrypt database = TRUE";


                    string selectCmd = "..............";

                    SqlCeConnection conn = new SqlCeConnection(connString);
                    conn.Open();

                    //Step 2:透過Connection連接物件來送出SQL敘述
                    SqlCeCommand cmd = new SqlCeCommand(selectCmd, conn);

                    //Step 3:由DataReader讀取SQL敘述的執行結果集
                    SqlCeDataReader dr = cmd.ExecuteReader();

                    while (dr.Read())
                    {
                                     .............................................
                    }

                    MessageBox.Show(~~~~);

                    conn.Dispose();
                    dr.Dispose();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }

    利用MessageBox 秀出一些值!!!
    然後再Form_Load 呼叫TEST()
    沒想到! 成功了!!!

    更弔詭的是~~~我這段本機資料庫程式是從原本執行會錯誤的那段copy過來的~~
    之後~會錯誤的那段!!!也可以執行了~~~~
    這......我不知道我要怎麼問下去了@@"

    2009年6月1日 下午 02:50
  • http://topic.csdn.net/u/20081211/16/45CB41FE-0B26-44BD-A1DD-1C5103ED2A6F.html


    這篇文章分享給大家!
    這是講了所有你升級SQL 3.5 SP1後會發生的事情 以及解決的方法

    Other :http://skycab.pixnet.net/blog/post/27896614

    哀!這個問題似乎很多人遇到~
    • 已標示為解答 Lolota Lee 2009年6月8日 上午 10:05
    2009年6月1日 下午 03:04
  • Hi,
    你描述的狀況實在有些奇怪..orz 
    所以你現在已經能夠正常執行你的程式以及連接到資料庫檔案了嗎?

    一般來說在開發端,如果有舊專案,因為當時使用的是sqlce 3.5(或更早之前的版本),在VS之內已經建好相關的東西,包含sqlce的參考,這部分VS不會去變更你參考的組件版本,所以在開發端想要升級的話要下載、安裝sqlce 3.5 sp1,之後手動更新你的組件。而在裝置端,原先安裝的runtime會是舊版本的sqlce,開發端升級,裝置端runtime也是要跟著升級,所以runtime的部分需要重新安裝。
    態度決定一切 ! - blog : http://bauann-makeit.blogspot.com/
    2009年6月2日 上午 01:28
    版主
  • 恩!再經過您的指導之後~
    還是無法解決這些問題!

    已經確定過桌機的SQL版本確定為V3.5 並且有安裝SP1 以及相關的SQL Tools

    所以~我的做法如下~
    第一步,我先硬開機把HP iPAQ 212的內容全部Reset
    第二步,安裝以下三個檔案
    sqlce.dev.CHT.ppc.wce5.armv4i.CAB
    sqlce.ppc.wce5.armv4i.CAB
    sqlce.repl.ppc.wce5.armv4i.CAB

    第三步,將程式參考更改System.Data.SqlServerCE.dll

    第四步,清空Debug內的相關資料(Complier後會產生一些執行檔 dll等等等)

    第五步,重新Complie 我的程式碼~~~

    然後就出現 "無法載入SQL Server Compact DLL。請重新安裝SQL Server Compact [DLL NAME = sqlceqp35.dll] " 


    不知道我以上的動作有哪些地方怪怪的嗎?  ^^"

    我也覺得超詭異...........也覺得很莫名...........所以覺得非常的$%@#$%@^%&^&(*&*(^


    2009年6月2日 上午 05:33
  • Hi,
    你的Device是什麼東東,另外你發生問題的專案方便給我測試看看嗎?我很好奇是什麼原因造成這樣的結果。


    態度決定一切 ! - blog : http://bauann-makeit.blogspot.com/
    2009年6月2日 上午 09:23
    版主
  • 我使用的裝置是 HP iPAQ 212
    有使用RFID  以及 Web Service

    我也想丟給版主看看~不過 還需要RFID才可以執行~~

    我這幾週又想了一下,會不會是因為我在 Working Thread執行這個存取本機資料庫的關係
    所以造成這樣的結果~~~

    2009年6月20日 上午 05:01