2011-07-08 3 views
1

選択/挿入/更新用の各テーブルのストアドプロシージャを作成し、すべての行でデータテーブルを塗りつぶし、バインドされたobjectdatasourceに渡しますグリッドビュー。それは良いか悪いのテクニックですか?グリッドビューを使用してデータベース内のレコードを更新/削除/挿入するには、どのような優れた手法(BO、BL、DALを使用)がありますか?グリッドビューを使用したデータベースとの良好な接近

ありがとうございます!

答えて

0

このアプローチは、基本的なCRUD関数のグリッドビュー(これはすべて必要な場合があります)に適しています。 ORM(Object-Relational Mapping)ツールを使用して、周りに遊ぶことができるビジネスオブジェクトを作成することを検討するほうがいいかもしれません。

+0

あなたはORMを使用せずに、BOを通じて私のCRUD操作の例をお願いできますか?私はコード例を意味する。 – user194076

+0

[エンタープライズライブラリのデータアクセスアプリケーションブロック(http://www.davidhayden.com/blog/dave/archive/2006/06/11/2985.aspx)を使用して、独自のアクティブレコードを作成できます。私たちが提案するフレームワーク、ライブラリ、ツールは、最終結果をより早く得るために役立つことを覚えておいてください。必要に応じて、ADO.NET 1.0から独自のデータアクセスレイヤーを構築できます。私の意見では、アプリケーション、ツール、ライブラリ、パターンを見つけて自分のコードを書くよりも仕事を終わらせるほうがいいです。コードは難しいので、コードを保守するのは難しいです。テストコードは難しいです..... –

0

ADO.NETエンティティデータモデルを使用してください、それは非常に簡単です!

参考:http://msdn.microsoft.com/en-us/library/aa697427(v=vs.80).aspx

+0

要件は私にADO.NETを使用させません – user194076

+2

私が間違っていても誰でも私を修正してください.Netを使用している場合は、 ADO.NETを使用してデータベースにアクセスする方法は他にありません。しかし、異なるバージョンのADO.NETがあります。 ObjectDataSourceはADO.NET 2.0、EntityフレームワークはADO.NET 3.5です。 –

+0

@トーマス私はあなたが正しいと思います。 @ user194076私はSystem.Data ...ネームスペース= ADO.NETを信じています。あなたの実際のデータアクセスにADO.NETを使用していない人は、Microsoftがサポートしているデータアクセス方法をさらに使いやすくしていない限り、C#.NETアプリケーションでは愚かです。マネージャーによってあなたに別のことを教えている場合は、新しい仕事場を見つけてください。 –

1

は私がメインのアプリケーションに公開するすべてのデータをカプセル化するデータモデル層を行います。私はモデルレイヤーとデータアクセスレイヤーを接続するビジネスロジックレイヤーを持っています。データアクセス層は、すべての魔法が起こる場所です。ここでは、System.Data、System.Data.SqlClient、またはMySQL.Data.MySQLClient(または使用するものは.NETコネクタを持つ)名前空間を使用して、実際にストアドプロシージャを呼び出してデータモデルにデータを格納しますまたはその逆。

ここに私が説明したようにした例がありますが、私は少し違います。私は実際にアクセスメソッドを公開する私のデータモデルが好きです、それはデータの整理に役立ちます。また、私はSystem.Data.DataTableを使用してデータをグリッドビューにバインドします。それはすばらしく機能し、主キーと外部キー情報を格納することさえできます。スキーマ情報をグリッドビューに渡して管理します。

public class ImageListModel 
{ 
    private ImageListBLL objImageListBLL; 

    public ImageListModel(string connectionString, string databaseEngine, int groupID) 
    { 
     if(databaseEngine.ToLower() == "mysql") 
      objImageListBLL = new ImageListBLL(DatabaseEngine.MySQL, connectionString); 
     GroupID = groupID; 
    } 

    public int GroupID 
    { 
     get; 
     set; 
    } 

    public DataTable GetImageList() 
    { 
     return objImageListBLL.GetImageList(GroupID); 
    } 

    public bool InsertImage(ImageModel objImage) 
    { 
     objImage.GroupID = GroupID; 
     return objImage.Insert(); 
    } 

    public bool DeleteImage(ImageModel objImage) 
    { 
     return objImage.Delete(); 
    } 

    public bool EditImage(ImageModel objImage) 
    { 
     return objImage.Edit(); 
    } 
} 

public class ImageModel 
{ 
    private ImageBLL objImageBLL; 

    public ImageModel(string connectionString, string databaseEngine) 
    { 
     if (databaseEngine.ToLower() == "mysql") 
      objImageBLL = new ImageBLL(DatabaseEngine.MySQL, connectionString); 

    } 

    public long ID 
    { 
     get; 
     set; 
    } 



    public string TitleTop 
    { 
     get; 
     set; 
    } 

    public string TitleBottom 
    { 
     get; 
     set; 
    } 



    public string ImageUrl 
    { 
     get; 
     set; 
    } 

    public string ExtraMarkup 
    { 
     get; 
     set; 
    } 

    public string DescriptionUrl 
    { 
     get; 
     set; 
    } 

    public int Order 
    { 
     get; 
     set; 
    } 


    public int UserID 
    { 
     get; 
     set; 
    } 

    public int GroupID 
    { 
     get; 
     set; 
    } 

    public bool Insert() 
    { 
     return objImageBLL.InsertImage(this); 
    } 

    public bool Edit() 
    { 
     return objImageBLL.EditImage(this); 
    } 

    public bool Delete() 
    { 
     return objImageBLL.DeleteImage(this); 
    } 

    public void ChangePosition() 
    { 
     objImageBLL.ChangeImagePosition(this); 
    } 
} 

ご覧のとおり、DALは完全に非表示になっています。 BLLは、適切なデータアクセスレイヤメソッドの呼び出しを管理します。これは、適切なデータ状態の操作、取得、および保存方法を使用して、イメージの一般的なリストをモデル化します。これは私の考えではモデリングが意味するべきものです。

dbコネクタの使用方法のナットとボルトを知っていることを前提としています。あなたがしなければ私に教えてください、私はいくつかのコードを掲載します。

次のように私のモデルは動作します:

   DataModel -- Exposed to main application 
       | 
       | 
       \/ 
      Business Logic Layer 
       | 
       pass DataModel 
       | 
       \/ 
      Data Access Layer 
+0

外部キーを持つオブジェクトの継承が必要ですか?またはこの文は意味をなさない? – user194076

+0

私は通常それが複雑になるようにしません。それを考える簡単な方法は、グリッドビューで扱うオブジェクトについて考えることです。各オブジェクトには、stringやintのような単純なデータ型を持ついくつかのメンバがあります。そのオブジェクトのすべてのIDと外部キーをクラスに格納します。次に、データモデル内にメソッドを書き込んで、オブジェクトの現在の状態(私のprefferedメソッド)に基づいてレコードを更新、挿入、削除するか、またはデータモデルにデータを格納してBLLに渡して公開することができますあなたの更新、挿入など...オブジェクトをリンクすることができます... –

+0

あなたのdatamodelの参照を持つ古き良き方法。したがって、たとえばOrderがある場合、顧客とそのorderIDに関連付けられたアイテムがあるため、Order Dataモデルにはそのレコードのデータを格納するCustomerおよびItemインスタンスがあります。私はシンプルなDatamodelでは、リンクは継承よりもずっと物事を保つことがわかります。 –

関連する問題