如何从MySQL数据库中获取表名的`List<string>`?

4

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

我想将完整的数据库加载到DataSet中,但据我所知,似乎MySqlDataAdapter.Fill()只能操作单个表格,是吗?这就是我想使用表格字符串集合的原因。

编辑:

  1. I look for the correct query: The following returns 59 different items despite the database only holding 3 tables:

        MySqlCommand command = new MySqlCommand("SELECT table_name FROM information_schema.tables where table_type = 'BASE TABLE'", connection);
        var result = command.ExecuteReader();
    
  2. I look for C# code to parse the result of the query into a List<string>.


如果一次性查询整个数据库,会导致内存不足。 - Arun Killu
@ArunKillu,为什么会这样呢?它完全取决于它的内容。我有一个数据库设置,其中包含几个在应用程序启动时加载的设置/属性表。 - Matt
2个回答

7
使用Entity Framework,将您的模式添加到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));
        }         
    }
}

抱歉,但我喜欢不使用实体框架。但是感谢您的建议。 - Matt
然后您将需要使用普通的SQL查询并将结果解析为列表。 - CloudyMarble
我的问题的重点正是如何将结果解析到列表中 :-)(请参见我的第二个要点) - Matt
太好了,谢谢你回答我的问题。顺便问一下,在 .Net 中有没有简化更复杂查询解析的方法?Linq2Sql 会有帮助吗?还是有其他的想法? - Matt
当然,Linq在这方面非常强大,但我并不熟悉Linq2SQL,我只能建议您考虑使用Entity Framework,因为它已经为您提供了可以运行Linq查询的DBSet。 - CloudyMarble
谢谢,我会仔细研究实体框架,只是我有些担心它的可移植性,它是否总是作为项目的一部分?乍一看,它更像是解决方案的一部分而不是项目,但我可能错了。 - Matt

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块中,但这样做通常是一个好习惯。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接