2009-09-14 11 views
2

J'ai besoin d'exécuter une application Windows Forms (C#) dans un client et la base de données sur l'autre.Puis-je faire en sorte que mon programme sélectionne la base de données par utilisateur?

Je souhaite que l'utilisateur sélectionne la base de données (SQL Server 2005) manuellement dans le programme. Dans ce cas, la base de données peut être changée d'un PC à l'autre.

Je dois éviter le nom de l'ordinateur ou le numéro IP dans la chaîne de connexion ou quelque chose d'utile.

Comment cela peut-il être réalisé?

Répondre

0

Vous pouvez utiliser le code ci-dessous pour indiquer à l'utilisateur avec boîte de dialogue de chaîne de connexion Build Vous trouverez l'article original 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

Vous pouvez modifier le nom de l'ordinateur en fonction de la sélection de l'utilisateur. Nous l'avons déjà fait, ou nous avons plusieurs chaînes de connexion dans app.config, et nous utilisons la sélection de l'utilisateur pour ouvrir la chaîne de connexion appropriée à partir de là.

<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

Je vous recommande d'utiliser le générateur de chaîne de connexion, et juste stocker les parties constantes dans votre fichier de configuration, tirant le reste de votre utilisateur.

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"; 
Questions connexes