首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在尝试打开连接时会抛出异常?

为什么在尝试打开连接时会抛出异常?
EN

Stack Overflow用户
提问于 2011-12-08 16:44:56
回答 1查看 1.4K关注 0票数 0

在打开连接时,我的C#代码中抛出了一个异常。Visual Studio引发异常,声明“连接未关闭。连接的当前状态为打开。”奇怪的是,连接根本没有打开。

奇怪的是,这个问题只出现在一台PC (PC-1)上。在另外两台PC (PC-2和PC-3)上,代码可以在这两台PC上正常编译和运行,没有抛出任何异常。如果我从这些PC-2或PC-3部署到Azure,一切都会正常工作。

所有3台PC都具有相同版本的Visual Studio2010 SP1 (10.0.40219.1 SP1Rel)、.NET (4.0.30319 SP1Rel)、Azure 1.6 SDK、Azure Ap Fabric 1.5.37和适用于VS2010的Azure工具(1.6.41103.1601)

以下是代码的相关部分:

代码语言:javascript
复制
   private long[] Foo(long rId, long mItemId)
    {
        List<long> list = null;

        using (myDBEntities ctx = new myDBEntities())
        {
            EntityConnection entityConnection = (EntityConnection)ctx.Connection;

            using (DbConnection connection = entityConnection.StoreConnection)
            {
                connection.Open();
                ...

以下是完整的异常详细信息:

代码语言:javascript
复制
System.InvalidOperationException was unhandled by user code
Message=The connection was not closed. The connection's current state is open.
Source=System.Data
StackTrace:
    at System.Data.ProviderBase.DbConnectionInternal.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
    at System.Data.SqlClient.SqlConnection.Open()
    at myPost.Models.Repository.Foo(Int64 rId, Int64 mItemId) in C:\code\Models\Repository.cs:line 326
    at myPost.Models.Repository.Foo(Int64 menuItemId, Int64 rId, mItemRatings[]& ratings, Photos[]& thumbnails) in C:\code\Models\Repository.cs:line 92
    at myPost.Controllers.HomeController.Index(String part1, String part2, String embed) in C:\code\Controllers\HomeController.cs:line 97
    at lambda_method(Closure , ControllerBase , Object[] )
    at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
    at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
    at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<InvokeActionMethodWithFilters>b__12()
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)
InnerException: 

在有问题的PC (PC-1)上,为了让代码运行,我必须在connection.Open();之前添加一个connection.Close();。然而,这在PC-2和PC-3上中断了,更糟糕的是,当我部署到Azure时,我得到了异常抛出,因为我添加的connection.Close()是不必要的。

我不知道PC-1上的设置有什么问题,因为它看起来像是配置问题,而不是代码问题。

EN

回答 1

Stack Overflow用户

发布于 2011-12-08 17:08:45

同意这可能不是代码问题。在继续之前,只需快速测试一下连接是打开还是关闭--最好还是这样做。类似于:

代码语言:javascript
复制
if (connection.State == System.Data.ConnectionState.Open)
{
     // ahoy, mate!
}
else
{
    connection.Open();
    // here be dragons
}

我所做的一切都是为了在机器中寻找幽灵,但有时做一个状态检查,然后继续你的生活会更容易。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8428314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档