在VB.net中转义一个字符串(添加斜杠)?

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)


Guf*_*ffa 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
Run Code Online (Sandbox Code Playgroud)