如何创建通用数据访问类?

时间:2010-08-05 14:28:25

标签: c# asp.net

ASP.net C#3.5 Framework,目前在Visual Studio 2008中工作。

我想要的是通用数据访问类。我已经看过其中几个,但我想要的是看到一个我传递连接字符串和SQL语句,它将返回一个对象列表或当只有一个项目的对象或没有响应需要布尔值让我知道如果成功了吗?

如果不让我知道,我希望这是有道理的,我会解释更多。

3 个答案:

答案 0 :(得分:3)

您不必自己动手。查看Microsoft.Data.dll。它介于低级ADO.NET代码(使用SqlConnection,SqlCommand等)和更高级别的ORM框架(如LINQ to SQL或nHibernate)之间:

Introduction to Microsoft.Data.dll

然后您的访问变得如此简单:

var db = Database.OpenConnectionString(connString);
for(var user in db.Query("select * from users"))
{
    var username = user.Username;
    // Do other stuff here
}

答案 1 :(得分:3)

您是否看过LINQ-to-SQL(不会推荐这个,但未来不会引起Microsoft的太多关注),LINQ-to-Entities(这就是微软在这方面所投入的资源可预见的未来区域,NHibernate或任何其他ORM(-ish) libraries for .NET

他们中的任何一个都有机制允许你创建你的查询(以更加类型安全的方式,我可能会添加)并以对象形式返回结果(如果你正在处理标量结果,则从程序中获得结果)

现在,它是不允许你传递查询字符串的情况,但是如果你动态生成它,那么通常情况下,这是一个非常糟糕的事情,因为大多数组成的动态SQL语句,如果不使用参数(你没有说明你的参数)会受到SQL injection攻击。

使用上面的任何库时,您可以编写查询,并且将解析参数,并且将安全地生成封面下的动态sql,而不受SQL注入攻击。

答案 2 :(得分:1)

查看我对这个问题的回答:

Fastest method for SQL Server inserts, updates, selects

这不是一个完整的类,但它为一个很好的通用实现奠定了基础,它将与linq-to-objects一起使用。