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. クエリの結果を .csv に解析する C# コードを探しますList<string>

4

2 に答える 2

6

Entity fraemwork を使用し、スキーマを 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 に答える