由于我正在开发的应用程序需要访问多个服务器,我希望允许用户选择“#site”网站。他们希望从下拉列表中访问,并相应地更新连接字符串。
我有两个想法(伪代码);
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)。
答案 0 :(得分:3)
查看SqlConnectionStringBuilder class。
例如
var builder = new SqlConnectionStringBuilder();
builder.DataSource = /* your server here */;
builder.InitialCatalog = "db";
/* etc.... */
var connString = builder.ConnectionString;
答案 1 :(得分: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();
答案 2 :(得分: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>
然后创建一个自定义配置部分,将“友好名称”映射到连接字符串。
找到这段代码: How to include simple collections in 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”的下拉框.......然后你可以将它映射回连接字符串。
现在,您可以使用连接字符串的名称填充下拉列表......但我不喜欢这个想法...............我更喜欢“友好名称”到“实际名称”映射。
至少,在配置文件中设置连接字符串.....,然后使用以下内容填充下拉列表:
ConnectionStringSettingsCollection connections = ConfigurationManager.ConnectionStrings;
foreach (ConnectionStringSettings connection in connections)
{
string name = connection.Name;
}
答案 3 :(得分: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;
}
}