2011-06-26 110 views
0

我已經使用app.config文件爲我的winform應用程序,該文件用於存儲所有窗體在我的應用程序連接使用的連接字符串到遠程MySQL數據庫。使用app.config文件連接字符串,並從用戶抽象

但是,當我在客戶的PC上安裝應用程序時,我希望他們看不到app.config文件。可能嗎?怎麼樣?請幫助代碼。

另外,是否有任何其他方式,創建一個連接字符串,可以通過所有窗體訪問。喜歡,我可以創建一個類connection.cs然後在每個表單中繼承它。 但如何做到這一點?我的意思是如何實現代碼

我的主要目標是爲連接創建一個字符串,這樣,如果我一次又一次地改變它,那麼我不需要去改變它的每一個形式,而是我會只在一個文件中更改它,並且它將被所有表單使用

使用app.config文件是一個不錯的選項,或者使connection.cs文件更好嗎?

回答

2

你並不需要使用一個連接字符串,從每一個形式,你需要一個數據訪問層,然後你只從所謂的商業邏輯另一層使用它來自世界各地,在理論上...

表單需要將數據加載到網格中,下拉或其他控件應該使用應用程序堆棧中較低層加載的數據。

閱讀關於3層架構的內容。

+0

行先生,所以你的意思是,我不應該使用--- OdbcConnection conn = new OdbcConnection(「Driver = {MySQL ODBC 5.1 Driver}; uid = ab; password = pass; server = www.myweb.com; database = mydb; port = 3306 「); ----在Form.cs文件中,那麼我應該在哪裏添加此代碼? – sqlchild

+2

不是每個形式我的上帝!你創建一個類,它不僅處理連接字符串,而且處理整個連接邏輯和消耗,展示諸如GetTable,GetScalar,ExecuteQuery等方法......或者看看Microsoft Entity Framework。 –

+0

我的應用程序加載並在mysql數據庫中插入數據,所以我需要一個連接字符串來建立到數據庫的連接。我有組合框控件,從數據庫加載數據的網格。所以我應該在哪裏添加連接字符串? – sqlchild

1

app.config始終在用戶機器上可見,因此您不應將存儲在其中的任何信息視爲祕密。

你真的有兩個選擇:

  • 繼續存儲在App.config的連接字符串,但加密。如果它的內部應用程序和安全性不是很大的問題,這將工作得很好。但是由於加密密鑰必須存儲在應用程序中,因此專門的黑客可以檢索它。

  • 如已經建議的那樣使用三層架構。有了這個連接字符串存儲在中間層,而你的應用程序不再直接連接到數據庫,而是通過中間層。然後可以使用每個用戶的用戶名/密碼或通過使用Windows身份驗證來進行身份驗證。連接字符串存儲在服務器上,只有擁有該服務器訪問權的人才能查看它並查看數據庫連接字符串。

+0

@Robert Anton Reese:先生,這裏的'中間層'是什麼,我的意思是一個數據庫,一個connection.cs文件或者其他什麼? – sqlchild

+2

舉一個簡單的例子,假設我們有一個窗體將用戶輸入保存到數據庫中。最簡單的方法是將ADO或EF調用放到代碼隱藏文件中的數據庫中。使用多層體系結構時,文件後面的代碼不會直接調用數據庫,而是會調用發送數據的WCF服務進行保存。然後WCF服務將數據保存到數據庫。由於WCF服務位於其自己的服務器上,因此app.config僅限於該機器的用戶。 –

+1

維基百科有一個體面的模式概述:http://en.wikipedia.org/wiki/Multitier_architecture –

0

App.config不能隱藏在用戶機器上,這是你可以做的。 您可以加密連接字符串並將其存儲在app.config中。看看這個article,它告訴你如何做到這一點。

1

如果您只是想要一個簡單的解決方案,爲什麼不在文件連接中創建一個名爲例如「Connection」的類。CS,讓它有一個名爲例如「ConString」靜態屬性或特性,其持有的連接字符串:

public class Connection 
{ 
    public static ConString = "your connection string here"; 
} 

然後你就可以隨時隨地訪問它:

OdbcConnection conn = new OdbcConnection(Connection.ConString); 

但這隻會是快速和骯髒的做法(雖然它的作品)。創建自己的數據庫層會更好 - 但也有更多的工作。

+0

先生,非常感謝,你能指導我創建一個自己的數據庫層。我準備好做大量的工作,只是我選擇的選擇必須是高效和好的,然後只有我會被稱爲一個好的程序員 – sqlchild

0

嘗試通過將其存儲在像構造等公共靜態字符串變量然後u可以使用該變種的任何地方引用定義之前[statThread] Program.cs的連接字符串: program.constr

相關問題