静态数据访问方法

时间:2012-04-05 21:07:46

标签: c# ado.net data-access-layer

我知道创建自定义数据访问层并不是一个好主意,除非你:1)确切知道你在做什么,和/或2)有一个非常具体的需求。但是,我正在维护一些使用自定义数据访问层的遗留代码,其中每个方法都如下所示:

    using (SqlConnection cn = new SqlConnection(connectionString))
{
    using (SqlDataAdapter da = new SqlDataAdapter("sp_select_details", cn))
    {
        using (DataSet ds = new DataSet())
        {
            da.SelectCommand.Parameters.Add("@blind", SqlDbType.Bit).Value = blind;
            da.SelectCommand.CommandType = CommandType.StoredProcedure;
            da.SelectCommand.CommandTimeout = CommandTimeout;
            da.Fill(ds, "sp_select_details");
            return ds;
        }
    }
}

因此,用法看起来像这样:

    protected void Page_Load(object sender, EventArgs e) {
    using (Data da = new Data ("SQL Server connection string")) {
        DataSet ds = da.sp_select_blind_options(Session.SessionID); //opens a connection
        Boolean result = da.sp_select_login_exists("someone");//opens another connection
    }
}

我认为使用Microsoft的企业库可以避免设置和拆除,即每次方法调用与SQL Server的连接。我这个想法是否正确?

3 个答案:

答案 0 :(得分:0)

是的,它肯定会节省您的时间,但您需要支付性能灵活性

因此,创建自定义DataLayer也是获得性能和灵活性的好主意。

考虑到您正在讨论遗留代码,我认为这样做有效,我不会将其更改为现代(但性能较差)仅用于在代码中添加新内容

坚固,可行DataLayer是您应该在遗留代码中实施的任何其他新技术的最佳选择。

简而言之,只有当真的序列有理由这样做时才更改它。我理解你愿意改变这些东西,因为总是很难理解别人写的代码,但是相信我,经常不改变旧的遗留代码是项目的最佳选择。

祝你好运。

答案 1 :(得分:0)

我过去使用过Enterprise Library非常成功,而Enterprise Library会隐藏一些乱七八糟的细节,但实际上它会在内部使用与您的示例中演示的相同的代码。

正如@tigran所说,我不建议尝试更改现有的代码库,除非它存在根本问题。

答案 2 :(得分:0)

是的,默认情况下连接池将打开。应用程序域基本上维护一个连接列表,当您发出调用以创建连接时,它会从池中返回一个未使用的连接(如果存在)或者如果不存在则创建一个连接。

因此,当您的连接cn超出范围时,使用语句并获取处理,实际发生的是它返回到池中,准备好下一个请求并根据各种优化参数在那里闲逛。

谷歌ADO连接池有更多细节,那里有很多。