使用linq-to-sql中的命令在SQL Server数据库上执行Shrink

时间:2014-07-03 01:36:11

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

我正在寻找清除交易日志的方法;特别是,我想缩小日志。我知道想要这样做的理由不错,但在这种情况下,这是有充分理由的。

我在SQL Server Management中运行它:

DBCC SHRINKFILE(DBName_log)
DBCC SHRINKFILE(DBName)

这就是我需要的。现在我想使用Linq-To-SQL从代码执行此命令,如下所示:

using (MyDC TheDC = new MyDC())
{
   TheDC.ExecuteCommand(....);
}

我需要发送什么命令才能在数据库中执行这些操作?

感谢。

1 个答案:

答案 0 :(得分:2)

您的DbContext公开System.Data.Entity.Database提供的方法ExecuteSqlCommand(),但有一些重载。

这里是MSDN文章中的documentation

  

对数据库执行给定的DDL / DML命令。与任何接受SQL的API一样,重要的是参数化任何用户输入以防止SQL注入攻击。您可以在SQL查询字符串中包含参数占位符,然后提供参数值作为附加参数。您提供的任何参数值将自动转换为DbParameter。

根据您的需要,我会使用以下内容:

context.Database.ExecuteSqlCommand("DBCC SHRINKFILE(DBName_log)" ... ); 

该文档还继续解释如何绑定一个参数,为了性能,我强烈建议在您对SQL Server或Oracle执行匿名查询时执行此操作。

  

或者,您也可以构造DbParameter并将其提供给SqlQuery。这允许您在SQL查询字符串中使用命名参数。

再次,根据您的要求:

context.Database.ExecuteSqlCommand(
    "DBCC SHRINKFILE(@file)", 
    new SqlParameter("@file", DBName_log)
);