【问题标题】:C# localdb SHRINKDATABASE command from C# codeC# 代码中的 C# localdb SHRINKDATABASE 命令
【发布时间】:2017-10-11 01:30:06
【问题描述】:

我正在尝试使用 Visual Studio 2017 社区缩小 LocalDb。我有一个 Win7 客户端 Windows 窗体应用程序,其中包含一个小型数据库(约 10MB 数据),由于 LocalDb 可用空间分配,导致数据库大小为 150MB。

我发现这个答案 (Executing Shrink on SQL Server database using command from linq-to-sql) 建议使用以下代码:

context.Database.ExecuteSqlCommand(
    "DBCC SHRINKDATABASE(@file)",
     new SqlParameter("@file", DatabaseTools.Instance.DatabasePathName)
);

DatabaseTools.Instance.DatabasePathName 从单个 DatabaseTools 类实例返回我的数据库的文件系统位置。

代码运行,但我不断收到此异常:

System.Data.SqlClient.SqlException: '无法在用户事务中执行收缩数据库操作。终止交易并重新发出声明。'

我之前尝试过COMMIT,但完全没有成功。关于如何从 C# 代码中有效地缩小数据库的任何想法? 谢谢!

【问题讨论】:

    标签: c# localdb shrink


    【解决方案1】:

    正如ExecuteSqlCommand 的文档所说,“如果没有现有的本地或环境事务,则将使用新事务来执行命令。”

    这是导致您的问题的原因,因为您不能在事务中调用 DBCC SHRINKDATABASE。考虑到它的作用,这并不令人惊讶。

    使用the overload that allows you to pass a TransactionalBehavior 并指定TransactionalBehavior.DoNotEnsureTransaction

    context.Database.ExecuteSqlCommand(
        TransactionalBehavior.DoNotEnsureTransaction,
        "DBCC SHRINKDATABASE(@file)",
         new SqlParameter("@file", DatabaseTools.Instance.DatabasePathName)
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-03
      • 1970-01-01
      相关资源
      最近更新 更多