2012-05-07 40 views
0

VB .NETアプリケーションに次のコードがあります。私はSQLデータを持つデータでOracleテーブルの列を更新しようとしています。アプリケーションを実行すると、 'or_cmd_3.ExecuteNonQuery()'行に対して(ORA-00933:SQLコマンドが正しく終了しません)が表示されます。Oracle Update:SQLコマンドが正しく終了していません

コードを削除してTOADまたはSQL Developerで実行すると、temp varialveをいくつかの偽のデータに置き換えても、正常に更新されます。私は何が欠けていますか?

事前に感謝します。

答えて

2

入力文字列を連結するクエリテキストを構築することは、すべて悪いことです。
1つの理由は、単一引用符のようにクエリを中断する文字や、データベースクエリ構文で定義された文字を削除する必要があることです。 しかし、最も重要な理由はSql Injection Attacksの可能性です。 しかし、エラーの原因としては、where句の前にスペースがないことが考えられます。 この方法でパラメータを使用してテキストをすべて置き換える必要があります。

update_oracle = "update SCHEMA.TABLE set " & _ 
     "ISSUE_ADDED_TO_ALM = '2'," & _ 
     "ISSUE_STATUS = :tmpALMStatus, " & _ 
     "ISSUE_REJECTED_REASON = :tmpALMRejected," & _ 
     "ISSUE_PHASE = :tmpALMCurrent_Phase, " & _ 
     "ISSUE_PRIORITY = :tmpALMPriority," & _ 
     "ISSUE_SYSTEM_IMPACTED = :tmpALMSystemImpacted," & _ 
     "ISSUE_DQ_ANALYST = :tmpALMDQAnalyst, " & _ 
     "ISSUE_COMMENTS = :tmpALMComments," & _ 
     "ISSUE_OWNER_DEPARTMENT = :tmpALMOwnerDepartment, " & _ 
     "ALM_ISSUE_ID = :tmpALM_ID," & _ 
     "DQ_Team = :tmpALM_DQ_Team" & _ 
     " where ISSUE_SUMMARY = :tmpALM_Summary" 

    Dim or_cmd= New NetOracle.OracleCommand(update_oracle, OracleConn) 
    or_cmd.Parameters.AddWithValue(":tmpALMStatus",ueio_tmpALM_Status) 
    or_cmd.Parameters.AddWithValue(":tmpALMRejected" ,ueio_tmpALM_Rejected) 
    or_cmd.Parameters.AddWithValue(":tmpALMCurrent_Phase",ueio_tmpALM_Current_Phase) 
    or_cmd.Parameters.AddWithValue(":tmpALMPriority",ueio_tmpALM_Priority) 
    or_cmd.Parameters.AddWithValue(":tmpALMSystemImpacted" ,ueio_tmpALM_System_Impacted) 
    or_cmd.Parameters.AddWithValue(":tmpALMDQAnalyst" ,ueio_tmpALM_DQ_Analyst) 
    or_cmd.Parameters.AddWithValue(":tmpALMComments",ueio_tmpALM_Comments) 
    or_cmd.Parameters.AddWithValue(":tmpALMOwnerDepartment",ueio_tmpALM_Owner_Department) 
    or_cmd.Parameters.AddWithValue(":tmpALM_ID",ueio_tmpALM_ID) 
    or_cmd.Parameters.AddWithValue(":tmpALM_DQ_Team",ueio_tmpALM_DQ_Team) 
    or_cmd.Parameters.AddWithValue(":tmpALM_Summary",ueio_tmpALM_Summary) 
    or_cmd.ExecuteNonQuery()   
+0

不思議なことに、この質問を解決しましたか? – Steve

関連する問題