2013-01-10 57 views
1

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

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

编辑:

  1. 我寻找正确的查询:下面的回报,尽管数据库59名不同的项目仅持有3个表:

    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>

+0

如果全分贝一次被查询,它将会出现内存不足 –

+0

@ArunKillu,为什么是这种情况。它完全取决于其内容。我有一个数据库设置与几个设置/属性表,在应用程序启动时加载。 –

回答

4

使用实体fraemwork,你的架构添加到的DbContext那么你可以做这样的:

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

编辑:

Alternativly你可以使用普通的SQL查询读取tablen名称(例如使用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)); 
     }   
    } 
} 
+0

对不起,但我喜欢没有实体框架。但是,谢谢你的建议。 –

+0

然后您将不得不使用普通的sql查询并将结果解析到列表中。 – CloudyMarble

+0

我的问题的全部点正是如何解析结果到列表:-)(请参阅我的第二点) –

1
  • 首先下载并安装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块,但这样做总是一个很好的做法。

相关问题