2

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

由于我不需要发送任何参数,因此我尝试传递 null ,但这会生成一个错误,指出 null 不是有效参数。我找不到该方法的重载。如何发送不需要附加参数的 SQL 命令?这是我的代码示例:

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

2 回答 2

7

parameters 是 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);
于 2013-04-04T18:43:35.420 回答
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);

我没有在那里检查我的语法,但这就是我要使用的方法。只有我会使用存储过程。

于 2013-04-04T18:55:26.697 回答