2011-07-08 16 views
1

我在做的是爲select/insert/update爲每個表創建存儲過程,然後我(如果select)用所有行填充數據表並傳遞給綁定的objectdatasource網格視圖。這是好還是不好的技術?有什麼好的技術(使用BO,BL,DAL)通過gridviews更新/刪除/插入數據庫中的記錄?通過gridview與數據庫接口的好方法

謝謝!

回答

0

這種方法是一個很好的方法,用gridview實現基本的CRUD函數(這可能就是你需要的!)。您可能會考慮使用ORM(對象關係映射)工具來製作可供玩家使用的業務對象。

+0

能否請你給我通過BO CRUD操作的一個例子,不使用ORM?我的意思是代碼示例。 – 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

@Thomas我認爲你是對的。 @ user194076我相信System.Data ... namespaces = ADO.NET。除非有人編寫了更易於使用的Microsoft支持的數據訪問方法,否則在C#.NET應用程序中不使用ADO.NET來實際訪問數據是愚蠢的。如果有經理告訴你,找一個新的工作地點。 –

1

我做它封裝了,我想接觸到的主要應用程序的所有數據的數據模型層。然後我有一個buisiness邏輯層,它將模型層連接到數據訪問層。數據訪問層是所有魔法發生的地方。在這裏,我使用System.Data,System.Data.SqlClient或MySQL.Data.MySQLClient(或任何你使用的 - 它有一個.NET連接器)命名空間來實際調用存儲過程並將數據放入數據模型或相反亦然。

下面是我按照我的解釋完成的一個例子,但我做的有點不同。我喜歡我的數據模型實際公開訪問方法,它有助於組織數據。另外,我使用System.Data.DataTable將數據綁定到gridview。它奇妙地工作,甚至允許你存儲主鍵和外鍵信息。它會爲您傳遞傳遞架構信息到gridview。

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和外鍵。然後你可以在你的數據模型中寫入方法來根據對象的當前狀態(我優先選擇的方法)更新,插入和刪除記錄,或者你可以將數據存儲在你的數據模型中並傳遞給BLL並讓它公開你的更新,插入等...你可以鏈接對象... –

+0

在一起的老式的方式,在您的數據模型的參考。因此,例如,如果我有訂單,我可能有一個客戶和一個與該訂單ID相關聯的項目,因此訂單數據模型將具有一個Customer和一個Item實例,該實例存儲該記錄的數據。我發現在一個簡單的Datamodel中,鏈接使事情比繼承更加健全。 –