我正在寻找清除交易日志的方法;特别是,我想缩小日志。我知道想要这样做的理由不错,但在这种情况下,这是有充分理由的。
我在SQL Server Management中运行它:
DBCC SHRINKFILE(DBName_log)
DBCC SHRINKFILE(DBName)
这就是我需要的。现在我想使用Linq-To-SQL从代码执行此命令,如下所示:
using (MyDC TheDC = new MyDC())
{
TheDC.ExecuteCommand(....);
}
我需要发送什么命令才能在数据库中执行这些操作?
感谢。
答案 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)
);