如何抽象数据库层?

时间:2011-12-28 13:20:08

标签: c# database ado.net

每次从db获取内容时,我的代码是:

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查询中获取数组结果的简单方法。

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

结帐Dapper.NET。它是一个轻量级的ORM,可以简化这项任务。

答案 2 :(得分:1)

  1. Entity Framework
  2. NHibernate
  3. Linq 2 SQL(第三名,因为它处于维护模式)。

答案 3 :(得分:1)

NHibernate是最强大的ORM框架之一。使用NHibernate,您仍然可以编写SQL查询,但是NHibernate将从Sql类型到.net类型进行数据转换。

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

  1. 提供执行自定义SQL查询功能的图层,您将使用其他图层的代码。
  2. Layer为您提供漂亮的界面并封装所有数据库逻辑,包括查询和对象转换。
  3. 等等。你可以添加设置层,它将从设置中读取连接字符串,但它都是可选的。