0

MS SQL DB からクエリを実行し、結果を一時変数に入れ、Oracle DB を更新する関数が VB.NET にあります。私の質問は、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 インジェクション攻撃の対象になることです。

このようなものに変更する必要があります

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 に答える