2009-09-14 74 views
2

我需要在客戶端和數據庫中運行Windows窗體應用程序(C#)。我可以讓我的程序按用戶選擇數據庫嗎?

我希望用戶在程序中手動選擇數據庫(SQL Server 2005)。在這種情況下,數據庫可以從一臺PC更改爲其他PC。

我需要避免連接字符串中的計算機名或IP編號或有用的東西。

這是如何實現的?

回答

0

您可以使用下面的代碼提示與構建連接字符串對話框用戶 你可以找到原來的文章here

/// <summary> 
/// Displays a Connection String Builder (DataLinks) dialog. 
/// 
/// Credits: 
/// http://www.codeproject.com/cs/database/DataLinks.asp 
/// http://www.codeproject.com/cs/database/DataLinks.asp?df=100&forumid=33457&select=1560237#xx1560237xx 
/// 
/// Required COM references: 
/// %PROGRAMFILES%\Microsoft.NET\Primary Interop Assemblies\adodb.dll 
/// %PROGRAMFILES%\Common Files\System\Ole DB\OLEDB32.DLL 
/// </summary> 
/// <param name="currentConnectionString">Previous database connection string</param> 
/// <returns>Selected connection string</returns> 
private string PromptForConnectionString(string currentConnectionString) 
{ 
    MSDASC.DataLinks dataLinks = new MSDASC.DataLinksClass(); 
    ADODB.Connection dialogConnection; 
    string generatedConnectionString = string.Empty; 

    if (currentConnectionString == String.Empty) 
    { 
     dialogConnection = (ADODB.Connection)dataLinks.PromptNew(); 
     generatedConnectionString = dialogConnection.ConnectionString.ToString(); 
    } 
    else 
    { 
     dialogConnection = new ADODB.Connection(); 
     dialogConnection.Provider = "SQLOLEDB.1"; 
     ADODB.Property persistProperty = dialogConnection.Properties["Persist Security Info"]; 
     persistProperty.Value = true; 

     dialogConnection.ConnectionString = currentConnectionString; 
     dataLinks = new MSDASC.DataLinks(); 

     object objConn = dialogConnection; 
     if (dataLinks.PromptEdit(ref objConn)) 
     { 
      generatedConnectionString = dialogConnection.ConnectionString.ToString(); 
     } 
    } 
    generatedConnectionString = generatedConnectionString.Replace("Provider=SQLOLEDB.1;", string.Empty); 
    if (
      !generatedConnectionString.Contains("Integrated Security=SSPI") 
      && !generatedConnectionString.Contains("Trusted_Connection=True") 
      && !generatedConnectionString.Contains("Password=") 
      && !generatedConnectionString.Contains("Pwd=") 
     ) 
     if(dialogConnection.Properties["Password"] != null) 
      generatedConnectionString += ";Password=" + dialogConnection.Properties["Password"].Value.ToString(); 

    return generatedConnectionString; 
} 
3

您可以根據用戶選擇更改計算機名稱。我們之前已經做過,或者在app.config中有多個連接字符串,並使用用戶選擇從那裏打開適當的連接字符串。

<connectionStrings> 
     <add name="Default" connectionString=".... 
     <add name="Second" connectionString=".... 
     ... 
</connectionStrings> 


m_connectionStringCollection = new Hashtable(); 

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
ConnectionStringsSection csSection = config.ConnectionStrings; 

for (int i = 0; i < ConfigurationManager.ConnectionStrings.Count; i++) 
{ 
    ConnectionStringSettings cs = csSection.ConnectionStrings[i]; 
    string connectionName = cs.Name; 
    m_connectionStringCollection.Add(connectionName, cs); 
} 
0

我推薦你使用連接字符串生成器,只是不斷的部分存儲在您的配置文件,從您的用戶拉動休息。

http://msdn.microsoft.com/en-us/library/system.data.common.dbconnectionstringbuilder.aspx

System.Data.Common.DbConnectionStringBuilder builder = 
    new System.Data.Common.DbConnectionStringBuilder(); 
builder["Data Source"] = "(local)"; 
builder["integrated Security"] = true; 
builder["Initial Catalog"] = "AdventureWorks;NewValue=Bad"; 
相關問題