我在VB.NET中有一个函数,它运行来自MS SQL DB的查询,将结果放入临时变量,然后更新Oracle DB。我的问题是,如果MS SQL中的字符串包含单引号('),如何更新具有该单引号的Oracle DB?
例如:Jim的请求
将产生以下错误:ORA-01756:引用的字符串未正确终止
ueio_tmpALM_Comments(来自MS SQL)是可能包含也可能不包含单引号的罪魁祸首。
update_oracle =
"update Schema.Table set ISSUE_ADDED_TO_ALM = '1'," & _
"ISSUE_COMMENTS = '" & ueio_tmpALM_Comments & "'," & _
"where ISSUE_SUMMARY = '" & ueio_tmpALM_Summary & "' "
Dim or_cmd_2 = New NetOracle.OracleCommand(update_oracle, OracleConn)
or_cmd_2.ExecuteNonQuery()
答案 0 :(得分:4)
从您的问题中可以清楚地看到,您正在使用字符串连接构建更新查询 像这样的东西
Dim myStringVar as string = "Jim's request"
Dim sqlText as String = "UPDATE MYTABLE SET MYNAME = '" + myStringVar + "' WHERE ID = 1"
这是SQL世界的主要罪恶。您的代码将因单引号问题而失败,但最重要的是此代码受Sql Injection Attacks的约束。
你应该改成这样的东西
Dim cmd As OraclCommand = new OracleCommand()
cmd.Connection = GetConnection()
cmd.CommandText = "UPDATE MYTABLE SET MYNAME = :myName WHERE ID = 1"
cmd.CommandType = CommandType.Text
cmd.Parameters.AddWithValue(":myName", myStringVar)
cmd.ExecuteNonQuery()