0

.NET を使用してから長い時間が経ちましたが、ありがたいことに sqlite と mysql データベースを比較するためのツールをほぼ書き終えました。データ リーダーを完全に把握できないため、SELECT 呼び出しを処理するラッパーの関数を作成しようとすると、問題が発生します。

私の理解では、リーダーでのループの各反復は次の行であり、GetString(x) は "x" の列値をインデックスとして返します。私が見つけたすべての例は、必要な行/列の名前を知っていました。「SELECT * FROM」呼び出しでこれを実行し、後でアクセスできるように列名/値を保存するにはどうすればよいですか? Microsoft には「FieldCount」機能があるようですが、MySQL コネクタでは空になります。

ありがとう!

public void Query(string query, string tableName)
{
    //Open connection
    if (this.OpenConnection() == true)
    {
        //Create Command
        MySqlCommand cmd = new MySqlCommand(query, connection);
        MySqlDataReader dataReader = cmd.ExecuteReader();

        //Read the data and store them in the list
        while (dataReader.Read())
        {
            int count = Count(tableName);

            for (int x = 0; x < count; x++)
            {
                Console.WriteLine(dataReader.GetString(count));
            }
        }

        //close Data Reader
        dataReader.Close();

        //close Connection
        this.CloseConnection();
    }
}
4

2 に答える 2

0

「mysql コネクタ」を使用して MySql のデータにアクセスします。自分でクエリを作成するよりも簡単です: http://dev.mysql.com/downloads/connector/net/

次に、EntityFramework を使用して、このコネクタを介してデータにアクセスします。また、mysql の既存の DB から *.edmx モデルを自動的に生成することもできます。これにより、データベース内のデータにすばやくアクセスして操作することができます。既存の DB からの *.edmx モデルの追加に関する情報は次のとおりです: http://msdn.microsoft.com/en-us/library/vstudio/cc716703(v=vs.100).aspx

たとえば、テーブルからすべてのデータを選択するクエリ - "Products" は次のようになります。

製品のリスト = dbContext.Products.Where(e=>e.ProductId!=-1).ToList();

これにより、テーブル Products のデータベース内の製品の全リストが返されます。

その後、必要に応じて製品を操作できます。たとえば、「製品」の最初の製品の「名前」列を取得すると、次のようになります。

String firstProductName = products[0].name;

お役に立てば幸いです。

于 2013-02-13T09:35:50.563 に答える