VB.NET:使用单引号转换文本以上传到Oralce DB

时间:2012-05-14 15:47:30

标签: vb.net oracle

我在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()

1 个答案:

答案 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()