DbContext ExecuteSQLCommand没有参数

时间:2013-04-04 18:30:00

标签: c# .net sql-server entity-framework

我正在尝试传入一个SQL字符串来删除一些记录。我正在使用DbContext.Database.ExecuteSqlCommand函数,但是除了SQL字符串之外,它还需要一个表单的参数列表:params Object [] parameters

由于我不需要发送任何参数,我尝试传递null,但这会产生错误,说null不是有效参数。我找不到该方法的重载。如何发送不需要其他参数的SQL命令?这是我的代码示例:

db.Database.ExecuteSqlCommand("DELETE FROM SignoffCommentAttachment 
WHERE SignoffCommentAttachment.SignoffCommentID 
IN (SELECT [SignoffCommentID] FROM [SignoffComments] 
WHERE SignoffID = " + signOffID.ToString() + ")", null);

2 个答案:

答案 0 :(得分:7)

参数是一个params参数,因此您可以为它传递0到多个对象。这应该工作

db.Database.ExecuteSqlCommand("DELETE FROM SignoffCommentAttachment WHERE SignoffCommentAttachment.SignoffCommentID IN (SELECT [SignoffCommentID] FROM [SignoffComments] WHERE SignoffID = " + signOffID.ToString() + ")");

你应该真正参数化signOffID。像

这样的东西
db.Database.ExecuteSqlCommand("DELETE FROM SignoffCommentAttachment WHERE SignoffCommentAttachment.SignoffCommentID IN (SELECT [SignoffCommentID] FROM [SignoffComments] WHERE SignoffID = {0})", signOffID);

答案 1 :(得分:3)

为了获得一点SQL注入保护,你应该在这里使用参数。你有一个参数。您可能也应该使用存储过程,但这是另一个问题。

我会像这样编码......

var parms = new ParameterCollection();

parms.Add("signOffId", signOffID);

db.Database.ExecuteSqlCommand("DELETE FROM SignoffCommentAttachment 
WHERE SignoffCommentAttachment.SignoffCommentID 
IN (SELECT [SignoffCommentID] FROM [SignoffComments] 
WHERE SignoffID = @signOffID)", parms);

我没有检查我的语法,但这是我将使用的方法。只有我会使用存储过程。