我在做的是爲select/insert/update爲每個表創建存儲過程,然後我(如果select)用所有行填充數據表並傳遞給綁定的objectdatasource網格視圖。這是好還是不好的技術?有什麼好的技術(使用BO,BL,DAL)通過gridviews更新/刪除/插入數據庫中的記錄?通過gridview與數據庫接口的好方法
謝謝!
我在做的是爲select/insert/update爲每個表創建存儲過程,然後我(如果select)用所有行填充數據表並傳遞給綁定的objectdatasource網格視圖。這是好還是不好的技術?有什麼好的技術(使用BO,BL,DAL)通過gridviews更新/刪除/插入數據庫中的記錄?通過gridview與數據庫接口的好方法
謝謝!
這種方法是一個很好的方法,用gridview實現基本的CRUD函數(這可能就是你需要的!)。您可能會考慮使用ORM(對象關係映射)工具來製作可供玩家使用的業務對象。
使用ADO.NET實體數據模型請,它非常簡單!
參考:http://msdn.microsoft.com/en-us/library/aa697427(v=vs.80).aspx
要求不允許我使用ADO.NET – user194076
任何人糾正我,如果我錯了,但如果你使用.Net,那麼你必須是使用ADO.NET訪問數據庫,沒有其他辦法。但是有不同版本的ADO.NET。 ObjectDataSource來自ADO.NET 2.0,Entity框架來自ADO.NET 3.5。 –
@Thomas我認爲你是對的。 @ user194076我相信System.Data ... namespaces = ADO.NET。除非有人編寫了更易於使用的Microsoft支持的數據訪問方法,否則在C#.NET應用程序中不使用ADO.NET來實際訪問數據是愚蠢的。如果有經理告訴你,找一個新的工作地點。 –
我做它封裝了,我想接觸到的主要應用程序的所有數據的數據模型層。然後我有一個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
您是否需要爲具有外鍵的對象進行繼承?或者這句話沒有任何意義? – user194076
我通常不會讓它變得複雜。思考它的一個簡單方法是考慮在網格視圖中要處理的對象。每個對象都有幾個成員,它們具有簡單的數據類型,比如string或int。我在該類中存儲該對象的所有id和外鍵。然後你可以在你的數據模型中寫入方法來根據對象的當前狀態(我優先選擇的方法)更新,插入和刪除記錄,或者你可以將數據存儲在你的數據模型中並傳遞給BLL並讓它公開你的更新,插入等...你可以鏈接對象... –
在一起的老式的方式,在您的數據模型的參考。因此,例如,如果我有訂單,我可能有一個客戶和一個與該訂單ID相關聯的項目,因此訂單數據模型將具有一個Customer和一個Item實例,該實例存儲該記錄的數據。我發現在一個簡單的Datamodel中,鏈接使事情比繼承更加健全。 –
能否請你給我通過BO CRUD操作的一個例子,不使用ORM?我的意思是代碼示例。 – user194076
您可以[使用企業庫數據訪問應用程序塊](http://www.davidhayden.com/blog/dave/archive/2006/06/11/2985.aspx)構建自己的活動記錄。請記住我們建議的任何框架,庫,工具,以幫助您獲得更快的最終結果。如果需要,您可以始終從ADO.NET 1.0構建自己的數據訪問層。在我看來,找到應用程序,工具,庫,模式來完成工作要比編寫自己的代碼更好。因爲編碼很難,維護代碼很難,測試代碼很難..... –