0

我在 VB.NET 中有一个函数,它从 MS SQL DB 运行查询,将结果放入临时变量,然后更新 Oracle DB。我的问题是,如果 MS SQL 中的字符串包含单引号 ( ' ),我如何更新 Oracle DB 以获取具有该单引号的内容?

例如:吉姆的请求

将产生以下错误: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()
4

1 回答 1

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()
于 2012-05-14T15:59:29.980 回答