簡體   English   中英

允許用戶輸入確定SQL Server連接字符串

[英]Allow User Input To Determine SQL Server Connection String

由於我正在開發的應用程序需要訪問多個服務器,因此我希望允許用戶從下拉列表中選擇他們希望訪問的“站點”,並相應地更新連接字符串。

我有兩個想法(偽代碼);

IF (drop-down value = Site2)
{string connectionString = "Server=server2; Database=db......"}

ELSE IF(drop-down value = Site3.....

要么;

string @server = drop-down value;

string connectionString = "Server=@server; Database=db......"
"pass connection variable??"

以下哪種方法最好? 還是有更有效的選擇?

我不確定如何將變量傳遞給連接字符串(選項2)。

看一下SqlConnectionStringBuilder類

例如

var builder = new SqlConnectionStringBuilder();
builder.DataSource = /* your server here */;
builder.InitialCatalog = "db";
/* etc.... */
var connString = builder.ConnectionString;
    string ConnectionString;
    switch (comboBox1.SelectedIndex)
    {
        case 0:
            ConnectionString = "Data Source=server1;Initial Catalog=database1;User ID=user1;Password=password1";
            break;
        case 1:
            ConnectionString = "Data Source=server2;Initial Catalog=database2;User ID=user1;Password=password2";
            break;
        case 3:
            ConnectionString = "Data Source=server3;Initial Catalog=database3;User ID=user1;Password=password3";
            break;
    }
    SqlConnection Con = new SqlConnection(ConnectionString);
    Con.Open();

如果您需要“超級動態”,那么Davio就是正確的。

如果您需要“我有N個數據庫,可能會不時更改”,那么我建議:

以下是典型的Dot Net 2.0及更高版本的配置。

<connectionStrings>
<add name="EastCoastConnectionString" connectionString="server=server01;database=myDb;uid=myUser;password=myPass;" />
<add name="WestCoastConnectionString" connectionString="server=server02;database=myDb;uid=myUser;password=myPass;" />
</connectionStrings>

然后創建一個自定義配置部分,該部分將“友好名稱”映射到連接字符串。

查找此代碼: 如何在ConfigurationSection中包括簡單集合

  <TransformationToDirectoryMappingsSection>
    <TransformationToDirectoryMappings>
      <add FriendlyName="NY Giants" PickupFolder="EastCoastConnectionString" />
      <add FriendlyName="NE Patriots" PickupFolder="EastCoastConnectionString" />
      <add FriendlyName="Carolina Panthers" PickupFolder="EastCoastConnectionString" />

      <add FriendlyName="San Francisco 49ers" PickupFolder="WestCoastConnectionString" / >
      <add FriendlyName="Seattle Seahawks" PickupFolder="WestCoastConnectionString" />
      <add FriendlyName="Arizona Cardinals" PickupFolder="WestCoastConnectionString" />
    </TransformationToDirectoryMappings>
  </TransformationToDirectoryMappingsSection>
</configuration >

然后在下拉框中填充所有“ FriendlyName”。......然后您可以將其映射回連接字符串。

現在,您可以使用連接字符串的名稱填充下拉列表……但我不喜歡這個主意……我更喜歡“友好名稱”到“實際名稱”的映射。


至少,在配置文件中設置連接字符串.....,並使用以下命令填充下拉列表:

http://msdn.microsoft.com/zh-cn/library/system.configuration.configurationmanager.connectionstrings.aspx

  ConnectionStringSettingsCollection connections = ConfigurationManager.ConnectionStrings;

    foreach (ConnectionStringSettings connection in connections)
    {
      string name = connection.Name;

    }

除了使用SqlConnectionStringBuilder外,我還將顯示名稱和連接字符串包裝在表單的嵌套類中。 這樣(在窗體/用戶控件中):

    private void PopulateComboBox(ComboBox comboBox)
    {
        var items = new[]
            {
                new ConnectionListItem {DisplayName = "Site 1", ConnectionString = new SqlConnectionStringBuilder("Server=...")},
                new ConnectionListItem {DisplayName = "Site 2", ConnectionString = new SqlConnectionStringBuilder("Server=...")},
            };

        comboBox.Items.AddRange(items);

    }

    class ConnectionListItem
    {
        public string DisplayName { get; set; }
        public SqlConnectionStringBuilder ConnectionString { get; set; }

        public override string ToString()
        {
            return DisplayName;
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM