通过gridview与数据库接口的好方法

时间:2011-07-08 02:37:49

标签: c# asp.net

我正在做的是为每个表创建存储过程以进行select / insert / update,然后我(如果选择)用所有行填充数据表并传递给与gridview绑定的objectdatasource。是技术好还是坏?有什么好的技术(使用BO,BL,DAL)通过网格视图更新/删除/插入数据库中的记录?

谢谢!

3 个答案:

答案 0 :(得分:1)

我做了一个数据模型层,它封装了我想要暴露给主应用程序的所有数据。然后我有一个商业逻辑层,它将模型层连接到数据访问层。数据访问层是所有魔术发生的地方。在这里,我使用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

答案 1 :(得分:0)

对于带有gridview的基本CRUD函数,这种方法是一种很好的方法(这可能就是你所需要的!)。您可能会考虑使用ORM(对象关系映射)工具制作可以使用的业务对象。

答案 2 :(得分:0)

请使用ADO.NET实体数据模型,非常简单!

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