none
關於SQL資料庫程式移動後或發行後的存取問題 RRS feed

  • 問題

  • 各位大大好 小弟最近有個疑問

    就是當我在寫winForm的SQL資料庫程式時

    connString = "Data Source=|DataDirectory|\\資料庫名稱.sdf"

    這是從我的C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA

    也就是本機資料庫裡讀出來的

    可是如果移動程式或發行程式到別台電腦後 這樣還讀得到嗎?

    還是要把"資料庫名稱.sdf"這個檔案放在\bin\Debug裡面做存取 才不會有移動後無法讀取的狀況?

    如果放在\bin\Debug裡面 那麼Data Source=的路徑要怎麼去描述?

    由於小弟只有一台電腦 所以不知道怎麼測試這個問題

    如果以上敘述有錯 幫忙指正

    請知道的大大幫忙解答一下

    感激不盡~



    • 已編輯 香腸俠 2012年5月13日 下午 04:28
    2012年5月13日 下午 04:05

解答

  • 如果客戶的公司裡的 network 有 SQL Server 存在,那你可以先發報你的mdf到他們的 SQL Server 上,那你的每一台客戶端便不用每一台電腦也安裝 SQL Express,也不用把 mdf 包含在程式安裝包中。

    如果沒有 SQL Server 也不想安裝 SQL express在每一台電腦中,那便不能用 mdf,要改用 MS excel 或 MS access


    大家一齊探討、學習和研究,謝謝!
    MCSD, MCAD, MCSE+I, MCDBA, MCDST, MCSA, MCTS, MCITP, MCPD,
    MCT, Microsoft Community Star(TW & HK),
    Microsoft MVP for VB.NET since 2003
    My MSMVP Blog

    • 已標示為解答 香腸俠 2012年5月15日 上午 09:24
    2012年5月15日 上午 08:01

所有回覆

  • 通常會遇到的是 UAC 的問題, 在製作安裝檔就要注意, 不然有可能會能讀不能寫, 或是出現更多奇妙的現象.

    請參考 [如何修改包裝在msi中的檔案權限]


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2012年5月13日 下午 04:37
  • 找到這篇文章,不曉得跟你的需求是否相符,希望對你有幫助。

    http://social.msdn.microsoft.com/Forums/is/vbgeneral/thread/f26911c7-b225-4ac2-a7bb-dd2fc477b01c


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    2012年5月13日 下午 10:52
  • 我會使用絕對路徑方式來指定,這樣不管到哪一台電腦都不會有問題。

    我會特別為資料庫建一個 資料夾,所有的資料表讀、寫、匯入集中管理,
    另建一個資料夾做備份資料庫用。

    例如,我在 C 槽建一個資料夾叫 "Order",這資料夾裡放客戶資料、訂購的商品........
    連結字串就;

    connString = "Data Source=C:\Order\資料庫名稱.sdf"

    先判斷資料夾有無存在,無存在就新建一下。

    2012年5月14日 上午 01:56
  • 這問題才大吧...

    如果路徑改了怎麼辦?磁碟機改了怎麼辦?

    放在應用程式的相對路徑影響絕對比放在絕對路徑小很多 ...


    學習不是查個 Google 套個書上的範例就算了,而是去熟悉了解每個程式碼背後的意義,否則就算學個幾百年,它也不會是你的。
    =================================
    小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
    雲端學堂Facebook: http://www.facebook.com/studyazure

    2012年5月14日 上午 03:16
    版主
  • 試試用Environment.CurrentFolder去組出你資料庫的絕對路徑


    2012年5月14日 上午 03:18
  • 如果只是這個程式要用這個sdf,建議你把它搬到程式安裝路徑的App_Data裡。

    如果會跟別的程式共用,你可考慮選一個Common一點的路徑。


    大家一齊探討、學習和研究,謝謝!
    MCSD, MCAD, MCSE+I, MCDBA, MCDST, MCSA, MCTS, MCITP, MCPD,
    MCT, Microsoft Community Star(TW & HK),
    Microsoft MVP for VB.NET since 2003
    My MSMVP Blog

    2012年5月14日 上午 04:28
  • 抱歉 各位大大

    是我描述得不夠詳細

    不管是.sdf或.mdf 我都希望程式能在發行或移動到別台電腦後 都能正確的執行

    不管是用clickonce或是包裝成.msi檔或整是整個程式資料夾移動 都能正確的執行

    請大大幫忙解答一下 謝謝~

    2012年5月14日 上午 07:11
  • 建議你把它搬到程式安裝路徑的App_Data裡。

    使用DataDirectory---WinForm程序中两份mdf文件问题的解决


    大家一齊探討、學習和研究,謝謝!
    MCSD, MCAD, MCSE+I, MCDBA, MCDST, MCSA, MCTS, MCITP, MCPD,
    MCT, Microsoft Community Star(TW & HK),
    Microsoft MVP for VB.NET since 2003
    My MSMVP Blog


    2012年5月14日 上午 07:57
  • 大家都給這麼多意見了, 我倒覺得你現在應該是先動手試著做做看, 然後遇到問題再繼續討論才對.

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2012年5月14日 上午 09:18
  • 其實小朱大說的相對路徑方法是比較合理的 小弟正在嘗試中

    等等做好再去網咖的電腦試看看

    感謝各位大大的幫忙~

    最後再問一個問題:

    VS內建的clickonce發行方法 裡面的data是使用相對路徑的方法部屬的嗎??

    2012年5月14日 上午 09:28
  • 如果你給UAC路徑,它便會把那data文件從ClickOnce包裡存到那個UAC路徑中。
    同樣地,如果是給[Drive]://[路徑]/Data.xml,那ClickOnce就把它存到那路徑裡。
    如果只有/[路徑]/Data.xml,那就會放在安裝路徑中

    大家一齊探討、學習和研究,謝謝!
    MCSD, MCAD, MCSE+I, MCDBA, MCDST, MCSA, MCTS, MCITP, MCPD,
    MCT, Microsoft Community Star(TW & HK),
    Microsoft MVP for VB.NET since 2003
    My MSMVP Blog

    2012年5月14日 上午 09:38
  • 各位大大好

    小弟剛去用別的電腦做測試 可是卻沒辦法讀到資料庫的檔案

    小弟是寫一個簡單的程式讓dataGridView去讀取 程式如下

                ConnectionString = "Data Source=.\\SQLExpress;"
                    + "AttachDbFilename=|DataDirectory|xxxx.mdf;"
                    + "Integrated Security=True;User Instance=True;";

    然後部屬成.msi檔 安裝下去 在我的電腦可以正常啟動 可是到別的電腦卻讀不到資料庫檔案

    我在部屬時有把.mdf加進去

    還是要把AttachDbFilename設定成為絕對路徑 ex:C:\Program Files\xxxx\xxx.mdf  ??

    如果電腦沒有安裝SQL Express 那Data Source這樣的描述可以成立嗎??

    還是有讓沒有灌SQL Express客戶端 執行的的方法??

    小弟比較駑鈍 請知道的大大幫忙解答

    感激不盡~



    • 已編輯 香腸俠 2012年5月14日 下午 06:23
    2012年5月14日 下午 05:21
  • 若你使用這種連線字串是採用 User Instance 模式來存取資料庫檔案,如果我沒看錯的話,仍需相依於 SQL Server Express,若沒安裝恐怕AP無法存取到你的資料庫檔案,這篇MSDN文章對SQL Server 2005 Express Edition User Instances有詳盡的介紹,不妨參考看看。

    http://msdn.microsoft.com/en-us/library/bb264564(v=sql.90).aspx


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/


    2012年5月14日 下午 10:45
  • 你必需在 Client 那邊也安裝 SQL express,要不然那電腦沒有需要的 windows 文件去把那個 User Instance 掛起來給程式使用。你看清楚一下TerryChuang大大給的 link, 找 [ Distribution and Deployment ] 那部份看清楚一點

    大家一齊探討、學習和研究,謝謝!
    MCSD, MCAD, MCSE+I, MCDBA, MCDST, MCSA, MCTS, MCITP, MCPD,
    MCT, Microsoft Community Star(TW & HK),
    Microsoft MVP for VB.NET since 2003
    My MSMVP Blog


    2012年5月15日 上午 01:59
  • 感謝 TerryChuang大 和 KenLin大 小弟我知道了我的寫法是要包含SQL EXPRESS的安裝檔 才能在沒有安裝SQL EXPRESS的客戶端進行程式

    後來小弟又看到了好幾種連線方法 像是直接連IP的 連SERVER的 或是設定絕對路徑的

    還有像是使用"initial catalog"的就要設定使用者帳密 那不就等同於也要在客戶端安裝SQL 還要將客戶端的使用者帳密設定好?

    上述的幾個方法都需要安裝SQL才能執行部屬好的程式吧? 小弟沒找到有讓程式讀取.mdf檔 卻能避開SQL伺服器的方式

    小弟想請問的是:在客戶端沒有安裝SQL EPRESS的情況下 有讓部屬好的程式在客戶端正常讀取到資料庫的辦法嗎??

    還請知道的大大告知一二

    謝謝~

    2012年5月15日 上午 07:30
  • 如果客戶的公司裡的 network 有 SQL Server 存在,那你可以先發報你的mdf到他們的 SQL Server 上,那你的每一台客戶端便不用每一台電腦也安裝 SQL Express,也不用把 mdf 包含在程式安裝包中。

    如果沒有 SQL Server 也不想安裝 SQL express在每一台電腦中,那便不能用 mdf,要改用 MS excel 或 MS access


    大家一齊探討、學習和研究,謝謝!
    MCSD, MCAD, MCSE+I, MCDBA, MCDST, MCSA, MCTS, MCITP, MCPD,
    MCT, Microsoft Community Star(TW & HK),
    Microsoft MVP for VB.NET since 2003
    My MSMVP Blog

    • 已標示為解答 香腸俠 2012年5月15日 上午 09:24
    2012年5月15日 上午 08:01
  • 了解了 感謝各位大大的幫忙~小弟收穫不少

    2012年5月15日 上午 09:23