2014-07-17 42 views
0

我有以下代码:我使用时是否需要关闭连接?

newCustomerDataSourceDataContext db = GetDataContext(); 
{ 
    var tId = from t in db._CRM_Ticket_Headers 
       from p in db.CRM_Priority_LKPs 
       where t.created >= fromDate && 
        t.created < toDate && 
        t.priorityId == p.priorityId && 
        t.statusId == status && 
        t.employeeUserId == csrId 
       select t; 
} 

我必须手动关闭连接,如果我添加using,和我使用的LINQ如下所示:

using (newCustomerDataSourceDataContext db = GetDataContext()) 
{ 
    var tId = from t in db.CRM_Ticket_Headers 
       from p in db.CRM_Priority_LKPs 
       where t.created >= fromDate && 
        t.created < toDate && 
        t.priorityId == p.priorityId && 
        t.statusId == status && 
        t.employeeUserId == csrId 
       select t; 
} 
+0

你不需要那样做。你在这段代码中遇到了什么异常? –

+0

@RajeevKumar我将确保我关闭之前在我的网站中打开的所有连接? –

+1

它没有必要这样做,b'coz当你实例化上下文使用: using(newCustomerDataSourceDataContext db = GetDataContext()) {} //你的db连接在这里自动关闭。 –

回答

2

这取决于你想发生什么检索数据不会很好地工作。如果使用using块,则将在将关闭连接的上下文中调用Dispose方法。但是,如果您的应用程序使用延迟加载,那将不再有效。

+0

..感谢我如何知道我是否使用延迟加载或不? –

+0

那么它可能已启用,但只有你可以告诉你是否在你的代码中使用它。 – DavidG

1

不,一旦你没有使用街区就会关闭。当您离开该块时资源会被清理。

你应该处理datacontect吗?

简答题;不,你不必,但你应该...

DataContext保存状态(例如,SqlConnection和指向您检索到的对象的指针)。一旦你释放了所有的引用,这些对象最终会被GC清除,但是其中一些对象(例如底层的SqlConnection)可能会占用你一旦完成后通常想要释放的资源,而不是依靠GC来清理。

正如提到,如果你在偷懒模式

+0

..我必须使用使用块或不? –

相关问题