5

Visual Studio Express 2012でC#を使用しています。デスクトップアプリケーションのみを使用しています。データベースとしてMySQLを使用しています

  データベースとMySQL間の接続は完全に機能しています。

  私の疑問は、検索を行って結果を返すことです。

  私が見たすべての例の中で、最も一般的なのはenter code here、検索結果を含むリストを返すMySQL接続クラスのメソッドを作成することです。これが概念的に正しいかどうかは本当にわかりませんが、非常に受け入れられるようです。

  私はなんとか私のテーブルからすべての顧客を返す検索を行うことができました。しかし、私の大きな質問は、このジェネリックメソッドをどのように作成するかということです。

  例えば

  私のフォームには、クリックイベントをトリガーするボタンがあります。

dbConnect = new DBConnect();
dbConnect.OpenConnection();
private List<Clients> listSQLQuery; 
listSQLQuery = dbConnect.Select("select * from  clients");
datagridview.DataSource = listSQLQuery;

上記で使用した私のメソッドdboConnect.Select():

public List<Clients> Select(string query)
{        


    //Create a list to store the result
    List<Clients> list = new List<Clients>();
   Clients clients = new Clients();


    //Open connection
    if (this.OpenConnection() == true)
    {
        //Create Command
        MySqlCommand cmd = new MySqlCommand(query, connection);
        //Create a data reader and Execute the command
        MySqlDataReader dataReader = cmd.ExecuteReader();

        //Read the data and store them in the list
        while (dataReader.Read())
        {
            clients.Id = dataReader["Id"].ToString();
            clients.Name = dataReader["Name"].ToString();
            list.Add(cliente);
        }

        //close Data Reader
        dataReader.Close();

        //close Connection
        this.CloseConnection();

        //return list to be displayed
        return list;
    }
    else
    {
        return list;
    }
}

そして最後に、私のクラスのクライアント

public class Clients
{
    public string Id { get; set; }
    public string Name { get; set; }
}

これはすべて機能しますが、クライアントを使用したクエリに非常に固有です。

ここでlistSQLQuery=dbConnect.Select( "select * from products")を  呼び出すと、このメソッドは機能しません。これは、製品ではなくクライアントのリストを返すように作成されているためです。

  質問がはっきりしているのかわかりませんが、クライアントなのか、商品なのか、部屋なのかを気にせずに電話をかけられたらいいなと思います。

このようなもの:

listSQLQuery.dbConnect.Select("select * from clients");
listSQLQuery.dbConnect.Select("select * from products");
listSQLQuery.dbConnect.Select("select * from rooms");

   listQuerySQLのタイプを気にせずに、一般的なリストを返す方法はありますか?このリストをdatagridviewにバインドしたいだけです。

私はC#の初心者なので、LINQ、EntityFrameworkについては何も知りません...

4

2 に答える 2

5

次のようにSelectメソッドを変更し、データリーダーからエンティティのインスタンスを解析および作成するための個別のメソッドを提供できます。

public List<T> Select(string query)
{
...
while(dataReader.Read())
{
     list.Add(CreateInstance<T>(dataReader)):
}
...
}

private T CreateInstance<T>(DataReader dataReader)
[
     if(T is Client)
          return CreateClient(dataReader);
     else if(T is Manager)
          return CreateManager(dataReader);
...
}

private Client CreateClient(DataReader dataReader)
{
     return new Client(dataReader["id"], dataReader["name"]);
}

編集:私はEFの推奨事項に同意しません。あなたはC#に慣れていないので、いくつかの基本的なもので遊ぶことで、EFといくつかのDALパターンをより簡単に理解できます。プロジェクトで壁にぶつかったときや、内部の仕組みを深く掘り下げる必要があるときは、システムの下位レベルの部分に自信を持つことが非常に重要です。

すでにDALテクノロジーに慣れている場合は、EFまたはNHibernateに簡単にジャンプできます。

于 2012-11-24T07:08:40.753 に答える
0

EFとLINQを学べば、他のコメンテーターに同意します。これにより、生活がはるかに楽になります。

EntityFrameworkビデオ

LINQビデオの
概要LINQクエリの概要Webページ
多くのLINQの例C#

ソリューションに関しては、SelectClients、SelectProduct、SelectRoomsの3つの異なるSelectメソッドを作成できます。接続を一度だけ開いたり閉じたりするように、コードを少し変更する必要があります。

于 2012-11-24T07:04:26.953 に答える