2011-05-02 39 views
0

私は.csファイルには、このコードが含まれていますパラメータ化のOracleクエリが

DbCommand dbc = 
    db.GetStoredProcCommand(
     string.Format(ConfigurationSettings.AppSettings["INSERT_TBLREPORTTYPE"] 
       , rtype, zoneid, name)); 

とweb.cofigの私のクエリは次のとおりです。私は、SQLインジェクションを防ぐことができるように

<add key="INSERT_TBLREPORTTYPE" 
    value="INSERT INTO TBLREPORT(ID,TYPE,RELATIONID,ISACTIVE,NAME)  
      VALUES(SEQ_REPORT.NEXTVAL,{0},{1},0,{2}) "/> 

は、どのようにパラメータを追加します私のサイトに?

私はそれらのどれもが作業していない

db.AddInParameter(dbc, "NAME", DbType.String, name); 
db.AddInParameter(dbc, "RELATIONID", DbType.Int32, zoneid); 
db.AddInParameter(dbc, "TYPE", DbType.String, rtype); 

とも

dbc.Parameters[0].DbType = DbType.String; 
dbc.Parameters[0].Value = name; 
dbc.Parameters[1].DbType = DbType.Int32; 
dbc.Parameters[1].Value = zoneid; 
dbc.Parameters[2].DbType = DbType.String; 
dbc.Parameters[2].Value = rtype; 

を試してみました。誰も私にこの提案について教えてください?

+0

あなたはORAようなエラーを得ている「それらのどれも...作業していない」説明 - ???? ?何が起こるのですか? –

+0

{Count = 0のこのOracleParameterCollectionの無効なインデックス0}} \t System.IndexOutOfRangeException – 1Mayur

+0

{0}、{1}、{2}ではなく、クエリで@ paramが@NAME、@ RELATIONID、@ TYPEである必要があります} – V4Vendetta

答えて

2

Oracleのパラメータ接頭辞は:です。だから、あなたがあなたのSQLを変更する必要があります。

<add key="INSERT_TBLREPORTTYPE" 
    value="INSERT INTO TBLREPORT(ID, TYPE, RELATIONID, ISACTIVE, NAME)  
      VALUES(SEQ_REPORT.NEXTVAL, :TYPE, :RELATIONID, 0, :NAME) "/> 

次に、あなたが使用してパラメータを追加することができます。

db.AddInParameter(dbc, ":NAME", DbType.String, name); 
関連する問題