在我的第一个c#项目中,我需要连接到数据库服务器以进行多个只读查询。有人会分享如何将查询组织到项目中的经验吗?目前我只需要在c#源文件中硬编码查询字符串。但是很难维护,一旦数据库服务器端发生了变化,我就遇到了麻烦。或者我应该使用appsettings将所有查询字符串放在.config文件中?还有更好的方法吗?我无权在服务器上保存存储过程。谢谢。
答案 0 :(得分:5)
根据您的需求,有不同的答案和不同的复杂程度。除了最小的项目之外,我创建了两个用于数据库访问的类库项目:一个包含数据模型和查询,另一个测试项目用于执行第一个项目的查询。在简单的解决方案中,您可以在ASP.NET或其他项目中使用此库。
您应该强烈考虑学习ORM,例如NHibernate或VS 2008/.NET 3.5's Linq-To-SQL或Entity Framework。最低限度,如果您有面向网络的应用程序,则必须记住使用parameterized queries。
在更复杂的解决方案中,您将完全将数据库封装到own service, or tier中。根据我的经验,我有一个数据访问层,它作为Windows服务运行在它自己的Windows Communication Foundation服务中,它是唯一可以直接与数据库通信或了解数据库数据模型的服务。它将与数据库进行所有交互,然后将数据转换为其他层读取的不同数据模型。我通常会创建一个名为“Contracts”的项目,其中包含从数据层传递到系统其余部分的所有接口和数据模型。这样做的原因是为了避免您提到的痛苦:您可以更新底层数据库,ORM层和“常用数据模型”,然后根本不更改其他层。
答案 1 :(得分:2)
如果这是您的第一个项目,请尽量保持简单。如果你添加太多变量,你可能会更多地考虑技术而不是解决方案。
也就是说,如果您的查询不希望更改它的参数,则可以使用存储过程。这种方法也有助于提升您的查询,因为执行计划将保存在数据库中。