0

私が開発しているアプリケーションは複数のサーバーにアクセスする必要があるため、ユーザーがアクセスしたい「サイト」をドロップダウン リストから選択し、それに応じて接続文字列を更新できるようにしたいと考えています。

2 つのアイデア (疑似コード) がありました。

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)。

4

4 に答える 4

3

SqlConnectionStringBuilder クラスを見てください。

例えば

var builder = new SqlConnectionStringBuilder();
builder.DataSource = /* your server here */;
builder.InitialCatalog = "db";
/* etc.... */
var connString = builder.ConnectionString;
于 2013-03-29T14:26:07.270 に答える
2
    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();
于 2013-03-29T14:27:45.387 に答える
1

「超動的」が必要な場合は、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/en-us/library/system.configuration.configurationmanager.connectionstrings.aspx

  ConnectionStringSettingsCollection connections = ConfigurationManager.ConnectionStrings;

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

    }
于 2013-03-29T14:36:43.147 に答える
0

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;
        }
    }
于 2013-03-29T14:36:58.180 に答える