我正在从一堆文本文件生成一些 sql 插入语句。
这些文本文件通常是用户输入的数据。我想清理这些数据,这样就不会破坏插入语句。
例如,某些输入数据中,人们使用了“Don’t”一词。 don't中的“'”会导致sql语句认为字符串已经结束,从而导致错误。
我可以调用任何 .NET 方法将所有这些字符转换为转义码或安全字符吗?
只有一个字符需要转义:ansi 0x27,又名单引号:
safeString = unsafeString.Replace("'","''");
不要对琴弦进行消毒。请改用参数化查询,因为它们会处理所有清理工作。
您没有指定您正在使用哪个数据库,因此我假设它是 MS SQL Server。 Microsoft 在 ASP.net 官方网站上有关于此的一篇文章。另请参阅 MSDN 了解 SqlCommand.Parameters 和 AddWithValue 方法。
我认为两者的结合通常是一个很好的做法。 在后面的代码上(假设文本框只接受数字:
strSQL="exec GetMember" & SanitizeInput(ID)
*do your db call*
Public Function SanitizeInput(byval InputString as String)
Dim OutputString=replace(InputString,"'","''")
OutputString=replace(OutputString,"<script>","")
OutputString=replace(OutputString,"DROP","")
*... and more rules...*
Return OutputString
End Function
在您的 SQl 存储过程上:
CREATE PROCEDURE GetMember
@ID int
AS
BEGIN
SET NOCOUNT ON;
Select {whatevercolumns} from Members where ID=@ID
END
GO