5

C#に頭を悩ませています。私はクラスとオブジェクトを作成してきたので、Memberというクラスを作成したとしましょう。

 public class Member
 {
     public int MemberID;
     public string FirstName;
     public string LastName;
     public string UserName;
 }

これを行うことで、そのクラスの新しいオブジェクトを作成します。

    Member Billy = new Member();

    Billy.UserName = "Jonesy";
    Billy.FirstName = "Billy";
    Billy.LastName = "Jones";

それはすべて問題ありませんが、データベースにクエリを実行して5人のメンバーを取り戻した場合、その場でオブジェクトを作成できますか?または、これらのメンバーをメモリに保存するための最良の方法は何ですか?

VB.Netを使用して、データテーブルに追加しました。しかし、私はC#を学んでいるので、これまでオブジェクト指向プログラミングを実際に行ったことがなく、考えたことはありません。今がOOPを学ぶのに最適な時期です。

4

4 に答える 4

1

これは一般的な問題です。幸いなことに、これには良い答えがあります:Linq To Sql!ここでそれについて読むことができます:http ://weblogs.asp.net/scottgu/archive/2007/05/19/using-linq-to-sql-part-1.aspx

基本的には、データベースで選択したテーブルごとに1つのクラスを作成します。これにより、すべてのオブジェクトをデータベースからオブジェクト指向プログラミングに直接取得することが非常に簡単になります。

保存は、関数「SubmitChanges()」を呼び出すのと同じくらい簡単です。これにはさらに多くのプロバイダーがありますが、Linqは多くの厄介な部分を抽象化するため、初心者としても適していると思います。

于 2010-03-28T21:03:21.073 に答える
1

LINQtoSQLを確認することをお勧めします。次に、次のようなコードを記述して、データベースにクエリを実行し、特定のユーザーを取得できます。

Member member = db.Members.Single(member => member.UserName == "Jonesy");

または、基準に一致するユーザーを取得するには:

IQueryable<Member> members = db.Members
    .Where(member => member.LastName == "Jones");

LINQ to SQLは、データベース構造に基づいてクラスを宣言するための定型コードの記述も処理します。

于 2010-03-28T21:04:52.777 に答える
1

LINQ to SQL(またはEntity Framework)を使用しない場合は、通常のADO.NET DataReaderを使用して結果をループし、詳細を含む新しいオブジェクトをインスタンス化して、リストに追加します。

大まかに次のようになります。

List<Member> members = new List<Member>();
using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();

    using (SqlCommand command = new SqlCommand(queryString, connection))
    {
        using (SqlDataReader reader = command.ExecuteReader())
        {
            while (reader.Read())
            {
                Member member = new Member();
                member.UserName = reader.GetString(0);
                member.FirstName = reader.GetString(1);
                member.LastName = reader.GetString(2);
                members.Add(member);
            }
        }
    }
}

foreach(Member member in members)
{
    // do something
}
于 2010-03-28T21:15:04.437 に答える
0

Linq2Sqlが2回提案するのが唯一の方法ではありませんが、すべてのオブジェクトをデータベース内のテーブルに1対1でマップできる場合を念頭に置いておくと、問題なく機能します。個人的には、代わりにEFを使用します。これにより、抽象化レイヤーをもう1つ作成できるようになります。

また、db4oなどを検討することをお勧めします。そこでは、pocoを節約できます。それだけです。

于 2010-03-28T22:43:01.323 に答える