【问题标题】:LINQ fails to create databaseLINQ 无法创建数据库
【发布时间】:2010-10-21 11:21:56
【问题描述】:

以下代码示例在某些 PC 上随机失败。在其他 PC 上无法重现该问题。所有 PC 都在 Vista SP1 上运行 .NET 3.5 SP1。

string connection = @"Data Source=PCNAME\SQLEXPRESS;Database=TestDatabase ;User Id=sa;Password=ThePassword;";

TestDatabase db = new TestDatabase (connection);

if (!db.DatabaseExists())
{
    db.CreateDatabase();
}

DatabaseExists() 返回falseCreateDatabase() 抛出此异常:

System.Data.SqlClient.SqlException: 数据库'TestDatabase'已经 存在。选择不同的数据库 名字。

文档指出,如果数据库存在并且可以打开,DatabaseExists() 返回 true。

什么可能导致数据库不可用?

编辑:数据库服务器是 SQL Server Express 2008

【问题讨论】:

    标签: c# .net sql-server linq-to-sql


    【解决方案1】:

    这可能是版权问题,即数据库存在但您无权打开它。这将返回 false 以及您提供的异常。

    【讨论】:

    • 奇怪的是问题在一些机器上来来去去。 IE。前一刻失败,下一刻成功。
    • 这是在你的代码的连续执行中,中间没有做任何事情(我的意思是什么)?如果是这样,那确实很奇怪。
    • 我在应用程序启动期间执行此操作。如果我收到错误 - 我只需重新启动应用程序,我通常会立即工作。
    • 很奇怪,它实际上看起来好像DatabaseExists 是不确定的。
    【解决方案2】:

    刚刚使用以下代码创建了一个简单的 Windows 应用程序...

           string connection = @"Data Source=.\SQLEXPRESS;Database=TestDatabase;Integrated Security=True";
    
            LinqToSQLDataContext dc = new LinqToSQLDataContext(connection);
    
            if (!dc.DatabaseExists())
            {
                dc.CreateDatabase();
            }
    

    确保没有名为 TestDatabase 的数据库。由于代码按预期工作。就我而言,唯一的区别是我使用的是集成安全性。当然,这不是完整的代码,我会在 dc.CreateDatabase 得到一个预期的错误,如下所示......

    因此,我可以确认代码是好的。看起来您在服务器上没有足够的权限。

    【讨论】:

      【解决方案3】:

      这可能是多用户竞争条件吗?

      User1: test database existance (false)
      User2: test database existance (false)
      User1: create database
      User2: create database (exception!)
      

      【讨论】:

      • 这是一个很好的理论,但是当应用程序启动时,数据库已经存在。
      【解决方案4】:

      连接问题是由 AUTO_CLOSE 属性设置为 true 引起的。这是所有 SQL Server Express 2008 数据库的默认设置。

      将此功能设置为关闭解决了该问题:

      ALTER DATABASE [database] SET AUTO_CLOSE OFF
      

      由于 AUTO_CLOSE 在 30 秒空闲时间后停止数据库,这也解决了应用程序中其他无法解释的与数据库相关的错误。

      More info on AUTO_CLOSE

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-24
        • 2014-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-01
        相关资源
        最近更新 更多