如何抽象数据库层

本文关键字:数据库 抽象 何抽象 | 更新日期: 2023-09-27 18:19:00

每次我从数据库中得到一些东西,我的代码是这样的:

using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.v3ConnString))
            {
                conn.Open();
                using (SqlCommand command = new SqlCommand())
                {
                    command.Connection = conn;
                    command.CommandText = "SELECT ...";
                    command.Parameters.AddWithValue("...", ...);
                    using (SqlDataReader dr = command.ExecuteReader())
                    {
                        if (dr.HasRows)
                            someVar = true;
                  }
                }
            }

相反,如果有更好的方法,我想做myArray = Db.sql("SELECT ...")或其他东西。有人能给我指个正确的方向吗?

编辑:我不是在寻找代码为我生成SQL,而是从SQL查询中获得数组结果的简单方法。

如何抽象数据库层

这是"老方法"。如果你正在使用新版本的框架(>2.0),那么请使用linq to sql。这里有一个很好的教程:http://weblogs.asp.net/scottgu/archive/2007/05/19/using-linq-to-sql-part-1.aspx

检查Dapper.NET。它是一个轻量级ORM,可以简化这个任务。

  1. 实体框架
  2. NHibernate
  3. Linq 2 SQL(远第三,因为它是在维护模式)。

NHibernate是最强大的orm框架之一。使用NHibernate,你仍然可以编写SQL查询,但是NHibernate将承担从SQL类型到。net类型的数据转换工作。

坦率地说,在你的情况下,使用或不使用ORM没有区别。如果您经常重复代码,这意味着您的应用程序设计非常糟糕,您需要对其进行改进。首先,您应该将您的应用程序划分为几个层(我只谈论数据库访问)。

  1. 层提供执行自定义sql查询的能力,您将使用来自其他层的此代码。
  2. 层,为您提供美观的接口和封装所有数据库逻辑,包括查询和对象转换。

等等。你可以添加设置层,它将从设置中读取连接字符串,但这都是可选的