C# 在Dropdownlist中显示不同的服务器、数据库和表名

C# 在Dropdownlist中显示不同的服务器、数据库和表名,c#,sql-server,C#,Sql Server,在我的C#程序中,我有3个下拉列表 在dropdownlist 1中,我必须显示所有SQL server名称 该服务器名称下的所有数据库名称都应显示在 下拉列表2 在dropdownlist 3中,该选定项下的所有表名 数据库必须显示。 我想知道如何为此写入连接字符串,因为可能有许多服务器、数据库和表。我无法为它们中的每一个写入连接字符串。我需要写入一个连接字符串,根据所选的dropdownlist值获取数据。 我使用if-else语句尝试了下面的代码,它工作正常。但是我不想使用if-else语

在我的C#程序中,我有3个下拉列表

  • 在dropdownlist 1中,我必须显示所有SQL server名称

  • 该服务器名称下的所有数据库名称都应显示在 下拉列表2

  • 在dropdownlist 3中,该选定项下的所有表名 数据库必须显示。 我想知道如何为此写入连接字符串,因为可能有许多服务器、数据库和表。我无法为它们中的每一个写入连接字符串。我需要写入一个连接字符串,根据所选的dropdownlist值获取数据。

  • 我使用if-else语句尝试了下面的代码,它工作正常。但是我不想使用if-else语句。所以请帮助我

    string Server1 = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;
            string Server2 = ConfigurationManager.ConnectionStrings["DBCS1"].ConnectionString;
            string Server3 = ConfigurationManager.ConnectionStrings["DBCS2"].ConnectionString;
            string Server4 = ConfigurationManager.ConnectionStrings["DBCSLocal1"].ConnectionString;
            private string Server;
    
    
    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
            {
                if (DropDownList1.SelectedValue == @"Anusql\SQLEXPRESS")
                {
                    Server = Server1;
                }
                else if (DropDownList1.SelectedValue == @"CAB3RMIGGA\SQLEXPRESS")
                {
                    Server = Server2;
    
                }
                else
                {
                    Server = Server3;
                }
    
                SqlConnection sqlconn = new SqlConnection(Server);
                SqlCommand cmd = new SqlCommand("SELECT * FROM SYS.databases", sqlconn);
                sqlconn.Open();
                SqlDataAdapter sda = new SqlDataAdapter(cmd);
                DataSet sd = new DataSet();
                sda.Fill(sd);
                DropDownList3.DataSource = sd;
                DropDownList3.DataTextField = "name";
                DropDownList3.DataValueField = "name";
                DropDownList3.DataBind();
                DropDownList3.Items.Insert(0, new ListItem("--Select--", "0"));
                sqlconn.Close();
    
    
            }
    

    你对解决这个问题有什么想法?到目前为止,你一句话也没说你试过/想到了什么?下面是我关于实施的建议(你会看到问题,因为我们不知道你知道什么,你可以使用什么)

    我希望下面的类保存我的所有配置

    internal class ProjectEnvironment
    {
       public string Name {get; set;}
       public List<SQLServer> Servers {get; set;}
    }
    
    internal class SQLServer
    {
       public string Name {get; set;}
       public string HostName {get; set;}
       public int Port {get; set;}
       public List<Database> Databases {get; set;}
    }
    
    internal class Database
    {
       public string Name {get; set;}
       public List<string> Tables {get; set;}
    }
    
    内部类项目环境
    {
    公共字符串名称{get;set;}
    公共列表服务器{get;set;}
    }
    内部类SQLServer
    {
    公共字符串名称{get;set;}
    公共字符串主机名{get;set;}
    公共int端口{get;set;}
    公共列表数据库{get;set;}
    }
    内部类数据库
    {
    公共字符串名称{get;set;}
    公共列表表{get;set;}
    }
    

    假设这个类有一个XML序列化的版本——填充了您公司/项目拥有的所有可能的SQL Server详细信息。该序列化版本将被存储并用作我的配置。在程序启动时,我将找到config.xml文件,将其序列化到前面提到的类结构中,然后将控件绑定到相关属性。

    到目前为止,您尝试了什么。也许你可以使用反射?也许类似于