2011-12-28 77 views
2

每次我得到的东西从数据库中,我的代码是这样的:如何抽象数据库层?

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

+0

你可以阅读关于DAO的http://en.wikipedia.org/wiki/Data_access_object – Marthin

回答

2

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

+2

不同意这 - stackoverflow使用它,它是在.net上写的最稳定/最快发展网站之一。 Massive也是很久以前才开始的,所以它们不是过时的,只是不同的方法。 – Giedrius

1
  1. Entity Framework
  2. NHibernate
  3. Linq 2 SQL(遥远第三,因为它是在维护模式下)。
+0

我一定会将Telerik的OpenAccess ORM工具添加到此列表中。它具有比EF更多的功能,并支持比原生SQL Server 2008数据类型(地理定位)更多的EF。 \ – tsells

+0

@tsells有什么意义? OP似乎并不想要任何它,他想写他自己的SQL :)另外,Telerik不是免费的,因此很难推荐。 – dasblinkenlight

+0

Telerik OpenAccess是免费的。 http://www.telerik.com/community/promos/freestuff.aspx – tsells

3

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

+0

+1。不一定是LINQ2SQL,但是任何LINQ层。 – TomTom

+1

不用了,谢谢。我可以编写好的SQL语句,并且不想为我自动生成它们。 – Marcus

+0

@IgorK我可以编写很好的程序集,但我经常让C编译器为我做。你不能拥有你的蛋糕,也不能吃它:你要么抽象出你的数据库层,要么你自己写SQL,并且保持与数据库的紧密结合。 – dasblinkenlight

1

NHibernate是最强大的ORMs框架之一。使用NHibernate,你仍然可以编写SQL查询,但NHibernate将从Sql类型转换为.net类型。

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

  1. 提供了执行自定义sql查询的能力的图层,您将使用来自其他图层的代码。
  2. 为您提供漂亮界面并封装所有数据库逻辑(包括查询和对象转换)的图层。

等等。您可以添加将从设置中读取连接字符串的设置图层,但它全部是可选的。