System.Data.OracleClient.OracleException:「ORA-01036:不正な変数名/番号」

2398 ワード

今日C#で書かれたプログラムがOracleデータベースを使用しているとき、次のような例外が発生しました.
System.Data.OracleClient.OracleException:“ORA-01036:       /  ”

例外が発生したコード・セグメントは次のとおりです.

                     sqlStr = "INSERT INTO serial_number (mo_id,product_id,create_date,first_no,begin_no,modify_date) VALUES(:mo_id,:product_id,sysdate,:first_no,:begin_no,sysdate)";//SQL  
                            conn=new OracleConnection(ConnStr2);//  OracleConnection  
                            conn.Open();//    
                            comm=conn.CreateCommand();//  OracleCommand  
                            comm.CommandText = sqlStr;//OracleCommand     SQL
                            comm.Parameters.Add(new OracleParameter(":mo_id",moId));//         
                            comm.Parameters.Add(new OracleParameter(":product_id",productId));
                           comm.Parameters.Add(new OracleParameter(":first_no",code+code2+begin));
                           comm.Parameters.Add(new OracleParameter(":begin_no",start));
                            comm.ExecuteNonQuery();//        

​

調べてみると、異なるデータベースに接続するには異なるパラメータ式が使用され、異なるデータベースのパラメータ式は次のようになります.
SqlClientパラメータ式:@ParameterName   OracleClientパラメータ式::ParameterName   OleDB.Netパラメータ式:? 
コードの@記号を:記号に変更するだけでいいので、パラメータ式の名前はSQL文と同じであることに注意してください.
​


                     sqlStr = "INSERT INTO serial_number (mo_id,product_id,create_date,first_no,begin_no,modify_date) VALUES(:mo_id,:product_id,sysdate,:first_no,:begin_no,sysdate)";//SQL  
                            conn=new OracleConnection(ConnStr2);//  OracleConnection  
                            conn.Open();//    
                            comm=conn.CreateCommand();//  OracleCommand  
                            comm.CommandText = sqlStr;//OracleCommand     SQL
                            comm.Parameters.Add(new OracleParameter(":mo_id",moId));//         
                            comm.Parameters.Add(new OracleParameter(":product_id",productId));
                           comm.Parameters.Add(new OracleParameter(":first_no",code+code2+begin));
                           comm.Parameters.Add(new OracleParameter(":begin_no",start));
                            comm.ExecuteNonQuery();//        

​

​

​

変更後は正常に動作します