【问题标题】:'Local Database Runtime: Cannot create named instance'本地数据库运行时:无法创建命名实例
【发布时间】:2017-04-10 23:47:29
【问题描述】:

我有一个 C# 应用程序,我正在尝试使用 LocalDB。截至目前,当我启动我的应用程序时,我遇到了这个错误。

Cannot create named instance.

The parameter for the LocalDB Instance API method is incorrect. Consult the 
API documentation.

我的 App.config 看起来像这样。

<system.data.localdb>  
   <!--    I saw this on another website, I'm not sure if it's neeed or not.-->
  <localdbinstances>  
    <add name="MSSQLLocalDB" version="mssqllocaldb" />  
  </localdbinstances>  
</system.data.localdb>
<connectionStrings>
<add name="DiaProdConnection" 
     connectionString="Data Source=(localdb)\MSSQLLocalDB;AttachDbFileName=|DataDirectory|\DatabaseFileName.mdf;Integrated Security=True;MultipleActiveResultSets=True" 
     providerName="System.Data.SqlClient" />
 </connectionStrings>
<entityFramework>
   <defaultConnectionFactory 
       type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<providers>
  <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>

当我运行 Sqllocaldb.exe 版本时,我得到以下输出。

..> SqlLocalDB.exe versions
  Microsoft SQL Server 2012 (11.0.3000.0)
  Microsoft SQL Server 2014 (12.0.4459.0)
  Microsoft SQL Server 2016 (13.0.1601.5)

理想情况下,应用程序会启动,当它发现数据库不存在时,它会创建它。

以下行在开发中确实有效,但如果在具有 2014 版 SQLLocalDB 的测试系统上失败,这就是我决定使用新字符串的原因。此外,人们说旧字符串已被弃用,仅适用于 2012 年。

  <add name="DiaProdConnection" connectionString="data source=(localdb)\v11.0;initial catalog=DiaDb;integrated  security=True;MultipleActiveResultSets=True;App=EntityFramework;Connection Timeout=15;Connection Lifetime=0;Min Pool Size=10;Max Pool Size=20;Pooling=true;" providerName="System.Data.SqlClient" />

非常感谢任何帮助。

【问题讨论】:

  • 适用于 2012 数据库的代码有connectionString="data source=(localdb)\ **v11.0** 。您可以从包含的内容中看到 SQL Server 2012 是版本 11。SQL Server 2014 是版本 12。另外,我会将 &lt;add name="MSSQLLocalDB" version="mssqllocaldb" /&gt; 更改为 &lt;add name="MSSQLLocalDB" version="12.0" /&gt;

标签: c# .net sql-server localdb


【解决方案1】:
  1. 彻底清除计算机上所有非 SQL 2014 LocalDb 或更高版本的实例。在撰写本文时,我使用的是 SQL-2014 版本。

  2. 让 App.Config 中的 EF 连接 xml 看起来像这样。

     <system.data.localdb>
       <localdbinstances>
         <add name="MyNamedInstance" version="12.0" />
       </localdbinstances>
      </system.data.localdb>
     <connectionStrings>
        <add name="DiaProdConnection" 
           connectionString="Data Source=(localdb)\MyNamedInstance;Initial 
           Catalog=MovieDB;Integrated 
           Security=True;AttachDbFilename=|DataDirectory|MovieDB.mdf" 
           providerName="System.Data.SqlClient" />
     </connectionStrings>
    
  3. 许多示例将在其连接字符串中包含该字段|DataDirectory|。不幸的是,他们不会告诉您的是,该字符串不是框架已知的特殊字符串,而是您必须自己分配和设置的变量。为此,我在应用程序的入口点调用此代码。

    AppDomain.CurrentDomain.SetData("DataDirectory",
        Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)); 
    

请记住,如果数据库存在于系统上但位于不同的位置,则连接器将引发错误。

跑步

Sqllocaldb.exe i

应该帮助您查看一个实例是否存在,您可以从那里决定是否需要删除它。

文档对错误的描述如此糟糕以及整个事情看起来多么令人讨厌,这让我感到震惊。

【讨论】:

    猜你喜欢
    • 2014-06-20
    • 2014-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-08
    相关资源
    最近更新 更多