【发布时间】:2013-11-08 21:54:11
【问题描述】:
初学者:
大家好 - 寻求帮助以了解我应该如何打开和关闭数据库连接。
我正在尝试解决的问题: 我有一组需要在数据访问层执行的存储过程。
我的服务调用 DA 方法 Get(Request req) 为:
public Data Get(Request request)
{
var data = new Data();
data = GetData();
data.AppleData = GetGrapeData();
data.OrangeData = GetGrapeData();
data.GrapeData = GetGrapeData();
return data;
}
其中所有getmethods getdata、getgrapedata 等都是Data 访问类中的私有方法,并且在每个方法中调用不同的SP。
现在在每种方法中我打开和关闭数据库连接为:
{ try{
using (var connection = new SqlConnection(connectionString)
using (var command = connection.CreateCommand())
{
connection.open();
ExecuteSP();
connection.Close();
}
}catch()
{
}
}
现在 有什么办法可以做到这一点,所以我必须打开/关闭连接一次? 我正在尝试在每个私有方法中捕获。那样行吗? 我在上面做的方式有什么问题吗?
【问题讨论】:
-
您可以创建一个类来管理您的连接和命令对象,并在需要时对其进行实例化。我将为您准备一个简单的示例并将其发布为答案。
-
您确定不想使用 ORM 吗?他们已经解决了这个问题......
-
每次你
catch {},我杀了一只小猫... -
如果我是你,我会将 'connection.Close()' 移动到 finally。如果您在执行存储过程时遇到异常,则连接将保持打开状态,并且您将遇到严重的泄漏(您甚至不会知道它 - 因为您正在默默地失败。
-
@Haedrian 幸运的是,由于他使用 using(),他不需要手动关闭连接 - 并且“终于”已经在后台为他完成了,通过框架,stackoverflow.com/questions/278902/… ...如果我是他,我首先会摆脱 Close。之后我会来解决代码重复和 catch(){} 的问题。
标签: c# c#-4.0 data-access-layer