非常简单的问题(令人惊讶的是我无法在任何地方找到类似的问题):如何在VB.net中转义表单数据?我有这样的各种行:
Dim query As String = "exec sp_Message_insert @clientid='" + pClientId + "', @message='" + pMessage + "', @takenby='" + pUserId + "', @recipients='" + pRecipients + "'"
如果我在消息中使用撇号,那么当然这会搞砸查询。我查看了字符串上的intellisense函数,但没有看到任何合适的...
答案 0 :(得分:16)
你到底是什么意思? VB.NET没有像c风格语言那样“转义”。
现在,如果你想确保pClientId变量中没有单个qoutes,那么你有两个选择:
选项1(不建议用于此方案):执行简单替换。即
pClientId = String.Replace(pClientId, "'","''")
但是,如上所述,我不会为看似SQL命令的人做这件事。我要做的是 选项2:在sql命令期间使用数据参数将参数传递给DB
例如:
Dim cn As New SqlConnection(connectionString)
Dim cmd As New SqlCommand
cn.Open
cmd.Connection=cn
cmd.CommandType=CommandType.StoredProcedure
cmd.CommandText= "sp_Message_insert"
cmd.Parameters.add(New SqlParameter("@clientid", pClientId)
cmd.Parameters.add(New SqlParameter("@message", pMessage)
cmd.Parameters.add(New SqlParameter("@takenby", pUserId)
cmd.Parameters.add(New SqlParameter("@recipients", pRecipients)
cmd.ExecuteNonQuery
答案 1 :(得分:5)
如果你想逃避字符串,那么你首先要告诉你使用的数据库。您必须为特定数据库使用正确的转义,以便您可以转义所需的所有字符,但只能转义那些字符。
我不知道任何使用斜杠作为转义字符的数据库。 MySQL使用反斜杠,也许这就是你的意思?
最好不要逃避字符串,而是使用参数化查询。例如:
Dim cmd As New SqlCommand("sp_Message_insert")
cmd.Parameters.Add("@clientid").Value = pClientId
cmd.Parameters.Add("@message").Value = pMessage
cmd.Parameters.Add("@takenby").Value = pUserId
cmd.Parameters.Add("@recipients").Value = pRecipients
答案 2 :(得分:2)
我认为你可以做两个撇号来创建一个撇号。我道歉,如果这不起作用,已经有一段时间了,因为我这样做了,我建议使用SQL参数,这将自动处理你的特殊字符并防止SQL注入。
答案 3 :(得分:2)
不要像这样建立一个字符串来执行 这就是SQL注入攻击的原因。
而是使用数据访问层,它允许您创建参数对象并将它们与要执行的存储过程相关联。
答案 4 :(得分:1)
如果要将String作为查询执行,则应使用以下代码:
Dim query as String
query.Replace("/", "//")
答案 5 :(得分:1)
因此,我想与System.Data.Odbc.OdbcCommand
一起添加关于参数名称的小注意事项,
根据{{3}}
用于ODBC的.NET Framework数据提供程序不支持传递 命名参数到SQL语句或被调用的存储过程 通过OdbcCommand。在任何一种情况下,请使用问号(?) 占位符。
此处的示例http://msdn.microsoft.com/en-us/library/system.data.odbc.odbccommand.commandtype:
Dim command As OdbcCommand = connection.CreateCommand()
command.CommandText = “{ call MoneyProcedure(?,?,?) ”
command.Parameters.Add("", OdbcType.Int).Value = 1
command.Parameters.Add("", OdbcType.Decimal).Value = 2
command.Parameters.Add("", OdbcType.Decimal).Value = 3