C# 我可以让我的程序按用户选择数据库吗?

C# 我可以让我的程序按用户选择数据库吗?,c#,database,C#,Database,我需要在客户端运行Windows窗体应用程序C,在另一个客户端运行数据库 我希望用户在程序中手动选择数据库SQL Server 2005。在这种情况下,数据库可以从一台电脑更改为另一台电脑 我需要避免连接字符串中的计算机名或IP号或其他有用的东西 如何实现这一点?您可以根据用户选择更改计算机名称。我们以前已经这样做过,或者在app.config中有多个连接字符串,并使用用户选择从那里打开相应的连接字符串 <connectionStrings> <add name

我需要在客户端运行Windows窗体应用程序C,在另一个客户端运行数据库

我希望用户在程序中手动选择数据库SQL Server 2005。在这种情况下,数据库可以从一台电脑更改为另一台电脑

我需要避免连接字符串中的计算机名或IP号或其他有用的东西


如何实现这一点?

您可以根据用户选择更改计算机名称。我们以前已经这样做过,或者在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);
}
这件适合你吗?

您可以使用以下代码提示用户使用“生成连接字符串”对话框 你可以找到原文


我建议您使用连接字符串生成器,只需将常量部分存储在配置文件中,从用户那里提取其余部分


Microsoft已发布了“代码库”上“数据连接”对话框的源代码

这里是一个有更多信息的网站,这里是

/// <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;
}
System.Data.Common.DbConnectionStringBuilder builder = 
    new System.Data.Common.DbConnectionStringBuilder();
builder["Data Source"] = "(local)";
builder["integrated Security"] = true;
builder["Initial Catalog"] = "AdventureWorks;NewValue=Bad";