“SQLExpress 数据库文件自动创建错误”但 DefaultConnect 指向 SQL Server 2008 R2

Posted

技术标签:

【中文标题】“SQLExpress 数据库文件自动创建错误”但 DefaultConnect 指向 SQL Server 2008 R2【英文标题】:"SQLExpress database file auto-creation error" but DefaultConnect pointing at SQL Server 2008 R2 【发布时间】:2013-01-16 11:50:40 【问题描述】:

我正在使用 Visual Studio 2012 创建一个 MVC4 Internet 应用程序。我已从 Entity Framework 移出,现在使用本地安装的 SQL Server 2008 R2。

我将连接字符串更改为指向我的本地 SQL Server 实例:

<connectionStrings>
    <add name="DefaultConnection" connectionString="Data Source=.;Initial Catalog=NotesBoard;Integrated Security=SSPI;" providerName="System.Data.SqlClient" />
</connectionStrings>

我的项目中没有其他连接字符串。这工作正常,但现在我得到了


在建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。 (提供者:SQL 网络接口,错误:26 - 错误定位服务器/指定的实例)

说明:在执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

SQLExpress 数据库文件自动创建错误: 连接字符串指定了一个本地 Sql Server Express 实例...


奇怪的是,它会间歇性地工作,然后又回到它的损坏状态。

更新:回答Pawel的问题: 我的所有控制器都引用了以下类:

public class DataAccess


    public void ExecuteNonQuery(String StoredProc, List<SqlParameter> Parameters)
    
        String ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["DefaultConnection"].ToString();
        SqlConnection cn = new SqlConnection(ConnectionString);

        SqlCommand cm = new SqlCommand(StoredProc, cn);
        cm.CommandType = CommandType.StoredProcedure;

        FillCommandParameters(Parameters, cm);

        cn.Open();
        cm.ExecuteNonQuery();
        cn.Close();
    

    public DataSet Execute(String StoredProc, List<SqlParameter> Parameters = null)
    
        String ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["DefaultConnection"].ToString();
        SqlConnection cn = new SqlConnection(ConnectionString);

        SqlCommand cm = new SqlCommand(StoredProc, cn);
        cm.CommandType = CommandType.StoredProcedure;

        FillCommandParameters(Parameters, cm);

        SqlDataAdapter da = new SqlDataAdapter();
        da.SelectCommand = cm;
        DataSet ds = new DataSet();

        cn.Open();
        da.Fill(ds);
        cn.Close();

        return ds;
    

    private static void FillCommandParameters(List<SqlParameter> Parameters, SqlCommand cm)
    
        if (Parameters != null)
        
            if (Parameters.Count > 0)
            
                foreach (var Parameter in Parameters)
                
                    cm.Parameters.Add(Parameter);
                
            
        
    

【问题讨论】:

I've moved away from Entity Framework 是什么意思? IE我没有使用实体框架,而是选择编写我自己的数据访问类(而不是自动生成的上下文类)和存储过程,以便我可以在符合我的模型的 SQL 中手动设置表和存储过程。 (我没有为配置文件提供者这样做,但它使用的是 DefaultConnection。) 堆栈跟踪是什么——它会显示你是否真的来自实体框架的moved away。你如何使用DefaultConnection(即如何打开连接并传递连接字符串)? 【参考方案1】:

如果这是 SQL Server Express(标签建议如此),那么您很可能有一个名为 SQLEXPRESS 的命名实例,因为这是 SQL Server Express 安装的默认实例名称。如果是这种情况,您需要将连接字符串更改为 Data Source=.\SQLEXPRESS

【讨论】:

我在原始帖子中确实提到我使用的是 SQL Server 2008 R2 的开发版本,也不是 SQL Express。我添加了 Express 标记,因为这是引发的异常的一部分。 对不起,我被 sql-server-express 标签弄糊涂了。【参考方案2】:

重新部署时,我在 MVC4 站点上遇到了同样的错误。我不能说问题的根本原因是什么,但似乎是在重新部署站点时保留了浏览器中缓存的某些内容(可能是会话 Guid),并且由于某种原因这会导致服务器端代码抛出这个奇怪的错误。

关闭并重新打开浏览器似乎会清除缓存,然后网站按预期工作。这或许可以解释问题的间歇性。

【讨论】:

以上是关于“SQLExpress 数据库文件自动创建错误”但 DefaultConnect 指向 SQL Server 2008 R2的主要内容,如果未能解决你的问题,请参考以下文章

ValueError: 提供 'c' kwarg 或 'color' kwarg 但不能同时提供;它们不同,但它们的功能重叠

文件存在但 java file.exists() 但返回 false

Node JS 正在运行但没有响应。工作,但随后定期停止响应

我正在尝试从邮递员发送帖子请求,但起初请求被接受,但数据存储为空

Angular 2 FormControl.reset() 不起作用,但 .resetForm() 起作用(但打字稿错误)

我试图通过 JS 触发 DOM 元素的悬停,但失败了。看来这是不可能的。但为啥 Chrome 可以做到呢?如何?