1

私の Windows フォーム アプリケーションでは、次のようなシナリオがあります。

ユーザーの入力を待つ 5 つのチェックボックスがあります。ユーザーがチェックボックスをクリックすると、アプリケーションはデータベースに接続する必要があります。各チェックボックスをクリックすると、異なるデータベースに接続されます。簡単にするために、IPアドレスとアプリ構成のすべての詳細を次のように指定しました

<add key="SQLServer1" value="mmm.mm.mm.m,abcd" />
<add key="SQLServer2" value="nnn.nn.nn.n,wxyz" />

私は次のようなコードを書きました:

ConnectionString = "Data Source=" + ***** + ";Initial Catalog=" + Master + ";Persist Security Info=True;Connect Timeout=0;User ID=" + ConfigurationSettings.AppSettings["username"] + ";Password=" + ConfigurationSettings.AppSettings["password"];

私が*をマークした場所で、あなたたちに助けを求めるべきです。* の意味は、ユーザーがクリックしたものに基づいて、アプリケーションが関連する IP に接続できる必要があるということです。

私が言ったことにチャンスはありますか?

他の代替案も本当に高く評価されています..

4

5 に答える 5

1

どのようにデータベースに接続していますか? Entity Framework、またはdbcontext、またはカスタムSQLConnectionクラスを介して?

あなたができることの1つは、ユーザーがチェックボックスを選択するとすぐに、接続文字列とサーバーIPの値を次のように取得することweb.config です

ConnectionStringSettings conSettings = ConfigurationManager.ConnectionStrings[VARIABLENAME];

そしてアプリの設定。

* * by app 設定値を置き換え、接続文字列をデータベース接続クラスに渡します。

于 2013-09-17T10:34:34.323 に答える
0

以下に示すように、フォーマットされた変数を使用できます。

string connectionString = String.Format("Data Source={0};Initial Catalog=" + Master + ";Persist Security Info=True;Connect Timeout=0;User ID=" + ConfigurationSettings.AppSettings["username"] + ";Password=" + ConfigurationSettings.AppSettings["password"], <get value from checkbox>);
于 2013-09-17T10:36:14.253 に答える
0

各 checkBox には checkBox.Checked パラメータがあるため、checkBox がチェックされたときに適切な IP アドレスを挿入する関数を作成できます。

if(checkBox1.Checked) { string DataSource = some IP address; }

そして、持っているチェックボックス/IP アドレスのペアごとにこのコードを繰り返します。

PSおそらく一度に1つのデータベースにのみ接続したいので、checkBoxの代わりにradioButtonを使用する必要があります

于 2013-09-17T10:36:34.490 に答える
0

1 つのアプリケーションで 5 つの異なるデータベースを使用する必要があるシナリオがありました。

何が行われたかというと、データベース関連のすべての機能を提供する単一のクラスDBUtilityがありました。このクラスには、接続文字列を初期化する init() というメソッドがありました。

そのため、メイン クラス DBUtility から継承した他の 4 つのクラスを作成し、init() メソッドを別の接続文字列にオーバーライドしました。

同様の構造を作成し、チェックボックスの選択に基づいて、必要なクラスのオブジェクトを作成することもできます

例えば

DBUtility obj = new DBUtility2();

どこ

public class DBUtility
{
public SqlConnection cn;
 public void init()
{
//initialize cn here
}

public DataSet getdata(string query)
{
//execute query using cn
}
}

public class DBUtility2 : DBUtility
{
public void init()
{
//initialize cn here
}
}
于 2013-09-17T10:42:33.713 に答える
0

を使用する理由がわかりませんCheckBox。1 つの DB にのみ接続する必要がある場合は、RadioBox. とにかく複数の DB が必要な場合は、checkBox Checked イベントを登録できます。

     this.checkBox1.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged);

そして、やります:

  private void checkBox1_CheckedChanged(object sender, EventArgs e)
  {
     if (checkBox1.Checked)
     {
        string currStr = ConnectionString.Replace("*****", currIP);// the currIP is up to u  
     }
     else
     {

     }

  }

すべてをリストに入れることができるようになりました

List<string> connStrings = new List<string>();

そして、やります

  private void checkBox1_CheckedChanged(object sender, EventArgs e)
  {
     string currStr = ConnectionString.Replace("*****", currIP);// the currIP is up to u  

     if (checkBox1.Checked)
     {
        connStrings.Add(currStr);
     }
     else
     {
        connStrings.Remove(currStr);
     }

  }

それらをすべてリストにまとめたので、それをforeach

foreach(string curr in connStrings)
{
}

それぞれを独自のイベントメソッドに登録する必要があることを思い出してくださいCheckBox

于 2013-09-17T10:38:00.537 に答える