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类?

您可以做的一件事是,只要用户选中一个复选框,就可以从中获取连接字符串和服务器 Ip 的web.config

ConnectionStringSettings conSettings = ConfigurationManager.ConnectionStrings[VARIABLENAME];

和应用程序设置。

替换* * by app 设置值并将连接字符串传递给数据库连接类。

于 2013-09-17T10:34:34.323 回答
0

我不知道你为什么用CheckBox. 如果您只需要连接到一个数据库,您应该使用RadioBox. 如果无论如何你需要几个数据库,你可以注册 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 回答
0

我有一个场景,我必须在一个应用程序中使用 5 个不同的数据库。

所做的是,我有一个单独的类DBUtility,它提供所有与数据库相关的功能。在这个类中,我有一个名为 init() 的方法,它初始化我的连接字符串。

所以我创建了其他 4 个从主类 DBUtility 继承的类,并将 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

您可以使用如下所示的格式化变量:

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.Checked 参数,因此您可以创建一个函数,在选中复选框时插入正确的 IP 地址:

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

并为您拥有的每一对复选框/IP 地址重复此代码。

PS,因为您可能只想在某一时刻连接到一个数据库,您应该使用单选按钮而不是复选框

于 2013-09-17T10:36:34.490 回答