我正在尝试传入一个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);
答案 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);
我没有检查我的语法,但这是我将使用的方法。只有我会使用存储过程。