Dis*_*oat 10 vb.net string escaping
非常简单的问题(令人惊讶的是我无法在任何地方找到类似的问题):如何在VB.net中转义表单数据?我有这样的各种线条:
Dim query As String = "exec sp_Message_insert @clientid='" + pClientId + "', @message='" + pMessage + "', @takenby='" + pUserId + "', @recipients='" + pRecipients + "'"
Run Code Online (Sandbox Code Playgroud)
如果我在消息中使用撇号,那么当然这会搞砸查询.我查看了字符串上的intellisense函数但看不到任何合适的东西......
Ste*_*ton 16
逃跑到底是什么意思?VB.NET没有像c风格语言那样"转义".
现在,如果您想确保pClientId变量中没有单个qoutes,那么您有两个选择:
选项1(不建议用于此方案):执行简单替换.即
pClientId = String.Replace(pClientId, "'","''")
Run Code Online (Sandbox Code Playgroud)
但是,如上所述,我不会为看似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
Run Code Online (Sandbox Code Playgroud)
如果你想逃避字符串,那么你首先要告诉你正在使用什么数据库.您必须为特定数据库使用正确的转义,以便您可以转义所需的所有字符,但只能转义那些字符.
我不知道任何使用斜杠作为转义字符的数据库.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
Run Code Online (Sandbox Code Playgroud)