在我的Windows窗体应用程序中,我有这样的场景:
我有5个等待用户输入的复选框。当用户单击复选框时,我的应用程序应连接到数据库。单击每个复选框应连接到不同的不同数据库。为简单起见,我已将我的ip地址和app config中的所有详细信息作为
<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 ..
我说的话有什么机会吗?
任何其他选择也非常感谢..
答案 0 :(得分:1)
您是如何连接数据库的?
通过Entity Framework
,dbcontext
或自定义SQLConnection
类?
您可以做的一件事,只要用户选中一个复选框,就可以从web.config
获取连接字符串和服务器Ip的值
ConnectionStringSettings conSettings = ConfigurationManager.ConnectionStrings[VARIABLENAME];
和应用设置。
用app设置值替换 * *,并将connectionstring传递给数据库连接类。
答案 1 :(得分: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>);
答案 2 :(得分:0)
每个checkBox都有一个checkBox.Checked参数,因此您可以创建一个函数,在选中checkBox时插入正确的IP地址:
if(checkBox1.Checked)
{
string DataSource = some IP address;
}
并为每对复选框/ IP地址重复此代码。
P.S因为您可能希望在一瞬间只连接到一个数据库,所以应该使用radioButtons而不是checkBoxes
答案 3 :(得分:0)
我不知道您使用CheckBox
的原因。如果您需要只连接到一个数据库,则应使用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
注册到他自己的事件方法
答案 4 :(得分:0)
我有一个场景,我必须在一个应用程序中使用5个不同的数据库。
做了什么,我有一个单一的 DBUtility 类,它提供了所有与数据库相关的功能。在这个类中,我有一个名为init()的方法,它初始化我的连接字符串。
所以我创建了继承自主类DBUtility的其他4个类,并将init()方法覆盖到不同的连接字符串。
您还可以创建类似的结构,然后根据复选框选择创建所需类的对象
e.g。
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
}
}