我有一种情况需要使用LINQ的ExecuteCommand方法来运行插入.
类似的东西(为了这个问题的目的简化):
object[] oParams = { Guid.NewGuid(), rec.WebMethodID }; TransLogDataContext.ExecuteCommand ( "INSERT INTO dbo.Transaction_Log (ID, WebMethodID) VALUES ({0}, {1})", oParams);
问题是,这是否是SQL注入证明,参数化查询的方式相同?
做了一些研究,我发现了这个:
在我的简单测试中,看起来ExecuteQuery和ExecuteCommand方法中传递的参数会根据提供的值自动进行SQL编码.因此,如果传入带有'字符的字符串,它将自动将SQL转义为''.我相信类似的策略用于其他数据类型,如DateTimes,Decimals等.
http://weblogs.asp.net/scottgu/archive/2007/08/27/linq-to-sql-part-8-executing-custom-sql-expressions.aspx
(您可以向下滚动查找)
这对我来说似乎有点奇怪 - 大多数其他.Net工具比"SQL逃逸"更好; 他们使用真实的查询参数.