很简单的问题(令人惊讶的我找不到一个类似的问题在任何地方):我怎么逃出VB.net中的表单数据? 我有不同的线路是这样的:
Dim query As String = "exec sp_Message_insert @clientid='" + pClientId + "', @message='" + pMessage + "', @takenby='" + pUserId + "', @recipients='" + pRecipients + "'"
如果我在邮件中使用单引号然后当然这螺丝了查询。 我已经通过弦上的智能感知功能的看了,但什么也没看到合适的...
你通过转义意味着什么呢? VB.NET没有以同样的方式,C风格的语言做“逃跑”。
现在,如果你想确保有在pClientId变量没有单qoutes,那么你有两个选择:
选项1(不推荐此方案):做一个简单的替换。 即
pClientId = String.Replace(pClientId, "'","''")
但是,正如指出的那样,我不会为了什么似乎是一个SQL命令来实现。 我会做的是选项2:使用数据参数中的SQL命令将参数传递给您的数据库
例如:
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
如果你想逃避的字符串,那么你首先要告诉你正在使用的数据库。 你必须让你逃避,你需要的所有字符使用正确的转义为特定的数据库,但只有那些。
我不知道用斜杠作为转义字符的任何数据库。 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
我觉得你可以做两个撇号来创建一个。 我道歉,如果不工作,它已经有一段时间,因为我已经这样做了,我会建议使用SQL参数,这将自动地处理你的特殊字符,防止SQL注入。
不建立一个字符串来执行这样的。
这正是为什么SQL注入攻击是可能的。
而是使用一个数据访问层,它可以让你创建参数对象并将其与存储过程执行关联。
如果你想执行一个字符串,你应该使用下面的代码查询:
Dim query as String
query.Replace("/", "//")
因此,想添加有关使用起来参数名的小提示, System.Data.Odbc.OdbcCommand
,根据http://msdn.microsoft.com/en-us/library/system.data.odbc.odbccommand.commandtype
在.NET Framework数据提供ODBC不支持将命名参数的SQL语句或通过的OdbcCommand调用的存储过程。 在这两种情况下,使用问号(?)占位符。
从这里一个例子http://msdn.microsoft.com/en-us/library/system.data.odbc.odbcparametercollection(v=vs.80).aspx#Y800 :
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