2010-06-11 78 views
0

我做了一個應用程序項目在Visual Studio 2008中的C#,SQL服務器從Visual Studio 2008如何製作保存數據庫完整性和正確性的軟件?

數據庫有像每20桌和多領域。

我做了一個接口,用於根據用戶的預定義需求添加刪除編輯和檢索數據。

現在我必須

  1. 作出投射到我可以提供給我的教授軟件。也就是說,他只需雙擊圖標即可啓動軟件。沒有Visual Studio 2008需要啓動調試。該數據庫將在一臺功能強大的計算機上(雙核最新的所有Windows XP),用戶將從另一臺使用LAN連接的計算機訪問該數據庫。只要服務器發生變化,我就可以使用Visual Studio 2008/debugger將連接字符串更改爲共享數據庫,但如何在軟件時執行此操作?

  2. 會有很多客戶。我應該給每個人都提供相同的軟件,所以他們都可以連接到數據庫?如何保持數據庫的完整性和正確性?我的意思是db.mdf文件將在一個文件夾中,它將與讀寫訪問共享。因此,一次只有一個用戶不需要寫入。那麼是否有任何編碼或?

+0

你在使用SQL服務器嗎?或者你直接訪問db.mdf? – saschabeaumont 2010-06-17 03:59:09

回答

2

1)一種選擇是使用Installshield打包和部署應用程序。

2)讓應用程序從應用程序配置中拉出連接字符串。我已經看到(並且完成了這一點),通過使用一般配置設置(如數據庫連接字符串)的XML文件,該文件位於文件系統上並與可執行文件位於同一目錄中,並且在可執行文件啓動時讀取。 3)通常,SQL Server將處理大部分的併發數據讀寫操作,並且保持數據的完整性(只要你體面地構造了你的表)。

既然你打算把這個應用程序部署到多臺機器上,這聽起來像你可以在X機器上安裝你的應用程序客戶端,他們將訪問數據庫機器上的SQL Server數據庫。如果採用這種方法,則不需要共享db.mdf文件,因爲只需由應用程序將訪問的SQL Server訪問該文件即可。

我希望有幫助。

0
  1. 寫一個安裝程序,拷貝可執行文件並支持DLL到用戶計算機。我相信有一個可以在Visual Studio 2008中使用的安裝項目。

2)您應該使用Windows 2000服務器,Windows XP限制連接數。從註冊表中讀取連接字符串並提供一個設置對話框來更改連接。

3)不要使用MS訪問,你應該使用真正的SQL Server來處理併發用戶訪問。 (SQL Server,MySQL,PostgreSQL,Oracle等)您需要使用SQL重寫您的數據庫訪問層,以免損壞數據。

甚至不要考慮部署該項目,否則您將面臨維護噩夢。有沒有經驗豐富的開發人員,甚至是你的教授,你可以尋求幫助?在這裏做很多功能應用程序。

+0

將連接字符串放入配置文件可能會更容易。 – 2010-06-11 19:42:41

+0

這是真的,但服務器將繼續改變,所以我每次都在更改配置文件,併發布新的複製af軟件?每次? – user287745 2010-06-11 19:46:54

+2

這就是爲什麼設置對話框很好。當服務器發生變化時,您發送電子郵件/通知用戶使用新的服務器。但實際上,數據庫服務器地址不應該改變。爲什麼它變化如此之大?這是不正常的。如果它只是需要更換到不同的機器,你應該確保它有相同的域名。 – 2010-06-11 19:50:33

2

保持數據完整性的最好辦法是將它設計到數據庫:

  • 你需要被正式設計的主鍵。

  • 您需要正式定義的主鍵/外鍵關係(並索引這些外鍵;它們不會自動編入索引)。

  • 如果您使用代理鍵,則您需要自然鍵的唯一約束。

  • 您需要的字段不能爲空,wehther他們可以允許爲空或不是需要在表中定義的默認值。

  • 您需要的數據(不存儲日期爲VARCHAR數據類型實例)的類型,正確的數據類型。

  • 如果你對你的一些字段的值具體限制,那麼你就需要限制執行這些數據庫或應用程序。

1

如何將數據庫的完整性和正確性維護呢?

數據庫應該使用限制來維護自己的內部一致性。

用戶應該使用事務中的SQL語句向數據庫寫入數據,以便所有相關寫入均以原子方式發生(它們全部成功或全部失敗)。通過在表,頁面或行級別維護鎖,事務還可幫助更高級別的用戶隔離之間的衝突。

更新

由於這裏要求是一些代碼僞裝成C#(我不使用它太多我自己):

private Method(SqlConnection connection) 
{ 
    using (SqlTransaction transaction = connection.BeginTransaction()) 
    { 
     try 
     { 
      // Use the connection here 
      .... 

      transaction.Commit(); 
     } 
     catch 
     { 
      transaction.Rollback(); 
      throw; 
     } 
    } 
} 

如果所有try塊成功完成的發言,他們將一起承諾。如果任何語句失敗,事務將被回滾,並且數據庫不會被更改。

嚴格地說使用聲明會照顧回滾如果交易未提交,所以如果你沒有做任何錯誤處理,你也可以寫相同的代碼是這樣的

private Method(SqlConnection connection) 
{ 
    using (SqlTransaction transaction = connection.BeginTransaction()) 
    { 
     // Use the connection here 
     .... 

     transaction.Commit(); 
    } 
} 
+0

好吧請提供一個代碼在C#與08年SQL這將解釋您的意思是在編程方面的交易,是的,我理解它,但代碼請真的有幫助 – user287745 2010-06-12 20:27:09

+0

一個問題的新代碼, { 嚴格地說,使用語句如果事務沒有提交,將會照顧回滾,所以如果你沒有做任何錯誤處理,你也可以寫如下相同的代碼: } 回滾,我明白,但只有一個問題,如果電去了和theres沒有備份電源 然後將不會回滾權利? – user287745 2010-06-15 16:43:15

+0

如果在發出回滾之前連接中斷,數據庫將最終意識到連接已斷開或處於非活動狀態,並以乾淨的方式關閉(與回滾實際上相同)。如果數據庫進程也由於電力故障而丟失,它將在重新啓動時恢復到乾淨狀態。 – richj 2010-06-17 19:25:10