【问题标题】:Get tables names of a specific database selected by user from combobox获取用户从组合框中选择的特定数据库的表名
【发布时间】:2018-10-12 14:21:21
【问题描述】:

我在 Visual Studio 中工作以获取 SQL Server 中的数据库名称,并获得成功。但现在我想用用户从另一个组合框中选择的数据库的表名填充组合框。这是我到目前为止在运行应用程序时尝试过的,表名的组合框是为我在查询中提到的数据库填充的。但它应该取决于用户,如果他从组合框中选择任何数据库,那么表名因为该数据库应填充在表名组合框中。所以用户不能在查询中明确提及数据库的名称。

基本上,它应该从组合框中选择所选数据库的名称,并使用尊重的表名填充另一个组合框。

using (SqlCommand com = new SqlCommand("SELECT TABLE_NAME FROM 
RegistrationFrom.INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'", 
con))
{
                using (SqlDataReader reader = com.ExecuteReader())
                {
                    //comboBox1.Items.Clear();
                    while (reader.Read())
                    {
                        comboBox1.Items.Add((string)reader["TABLE_NAME"]);
                    }
                }
            }

【问题讨论】:

  • RegistrationFrom 是数据库的名称,你只需要将它替换为你的第一个组合框的值。
  • @BrunoQuintella 我可以从字符串中的组合框中获取当前选定的项目,即数据库名称,但我不知道我应该如何替换查询中的字符串值。你能再写一次查询吗?
  • 也许您应该使用SqlConnectionStringBuilder 并在每次查询所选数据库之前更改连接字符串。
  • 如果我理解你想要的正确你的查询必须是:SELECT TABLE_NAME FROM RegistrationFrom.INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_SCHEMA='<Selected Database Name>'
  • @BanForFun 谢谢,但我想要这样的东西。 SELECT TABLE_NAME FROM combox.Text INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'.......combox.Text 包含数据库名称

标签: c# sql-server winforms visual-studio


【解决方案1】:

您需要将 RegistrationFrom 替换为您的第一个组合框的值。

System.Text.StringBuilder myQuery = new System.Text.StringBuilder();
myQuery.AppendFormat("SELECT TABLE_NAME FROM {0}.INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'", valueOfCombobox);

using (SqlCommand com = new SqlCommand(myQuery.ToString(), con))
{
    using (SqlDataReader reader = com.ExecuteReader())
    {
        //comboBox1.Items.Clear();
        while (reader.Read())
        {
            comboBox1.Items.Add((string)reader["TABLE_NAME"]);
        }
    }
}

【讨论】:

    【解决方案2】:

    要获取表列表,您可以使用以下查询:

    SELECT * FROM [master].[sys].[databases]
    

    您将需要过滤以删除系统数据库,可能排除 owner_sid 0x01 是您的最佳选择。现在您已将其转储到您的组合框中。连接到该组合框上的选择更改并运行当前查询,将列表转储到组合框 2。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 2019-10-06
      • 2020-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多