4

如何获取List<string>MySQL 数据库中包含的所有表名?

我想将完整的数据库加载到 DataSet 中,但据我了解,MySqlDataAdapter.Fill() 似乎只在单个表上运行,对吗?这就是我想要使用表字符串集合的目的。

编辑:

  1. 我寻找正确的查询:尽管数据库仅包含 3 个表,但以下返回 59 个不同的项目:

        MySqlCommand command = new MySqlCommand("SELECT table_name FROM information_schema.tables where table_type = 'BASE TABLE'", connection);
        var result = command.ExecuteReader();
    
  2. 我寻找 C# 代码来将查询结果解析为List<string>.

4

2 回答 2

6

使用实体框架,将您的模式添加到 dbcontext 然后您可以进行以下操作:

var tableNames = context.MetadataWorkspace.GetItems(DataSpace.SSpace)
                        .Select(t => t.Name)
                        .ToList();

编辑:

或者,您可以使用普通的 sql 查询(例如使用Show tables)读取表名称,并将它们解析为如下列表:

List<String> Tablenames = new List<String>();

using(SqlConnection connection = new SqlConnection("conn_string"))
{
    string query = "show tables from YourDB";
    SqlCommand command = new SqlCommand(query, connection);
    using (SqlDataReader reader = command.ExecuteReader())
    {
        while (reader.Read())
        {
            Tablenames.Add(reader.GetString(0));
        }         
    }
}
于 2013-01-10T06:21:35.477 回答
3
  • 首先下载并安装Connector/Net。这是在 C# 中使用 MySQL 所必需的。MySQL for Visual Studio不是必需的,但我建议您安装它。它可以帮助您在 Visual Studio 中设计 MySQL 数据库。

  • 添加参考MySql.Data

  • 添加using MySql.Data.MySqlClient;您的代码。

像这样声明一个函数:

public List<string> MySqlCollectionQuery(MySqlConnection connection, string cmd)
{
    List<string> QueryResult = new List<string>();
    MySqlCommand cmdName = new MySqlCommand(cmd, connection);
    MySqlDataReader reader = cmdName.ExecuteReader();
    while (reader.Read())
    {
        QueryResult.Add(reader.GetString(0));
    }
    reader.Close();
    return QueryResult;
}

然后创建一个MySql连接并调用这个函数:

string connStr = string.Format("user={0};password={1};database={2}",
                                username,password,database);
List<string>TableNames = new List<string>();//Stores table names in List<string> form
using(MySqlConnection Conn = new MySqlConnection(connStr))
{
    Conn.Open();
    string cmdStr = "show tables";
    TableNames = MySqlCollectionQuery(Conn,cmdStr);
}

我没有把它放在一个try ... catch块中,但这样做总是一个好习惯。

于 2014-05-20T12:11:18.333 回答