2012-11-06 133 views
2

是否可以使用相同的預處理語句(相同的OdbcCommand對象)執行多個查詢?C#編寫語句和多個查詢

下面是我的代碼,並拋出以下異常:System.Data.Odbc.OdbcException was caught Message=ERROR [07006] [IBM][CLI Driver] CLI0102E Invalid conversion. SQLSTATE=07006

... 
     odbcConnection = myConnection.getOdbcConnection(); 
     odbcConnection.Open(); 
     odbcCommand = odbcConnection.CreateCommand(); 
     odbcTrans = odbcConnection.BeginTransaction(IsolationLevel.ReadCommitted); 
     odbcCommand.Transaction = odbcTrans; 
try{ 
    odbcCommand.CommandText = queryStatement1(); 
      odbcCommand.Parameters.AddWithValue("?ID1", parameter1); 
      odbcCommand.Parameters.AddWithValue("?ID2", parameter2); 
    ... 
    odbcCommand.Parameters.AddWithValue("?ID11", parameter3); 
    odbcCommand.Prepare(); 
      odbcCommand.ExecuteNonQuery(); 


    odbcCommand.CommandText = queryStatement2(); 
    odbcCommand.Parameters.AddWithValue("?ID1", parameter4); 
      odbcCommand.Parameters.AddWithValue("?ID2", parameter5); 
    ... 
    odbcCommand.Parameters.AddWithValue("?ID13", parameter6); 
    odbcCommand.Prepare(); 
      odbcCommand.ExecuteNonQuery(); 
    odbcTrans.Commit(); 
} catch(Exception e){ ... } 
... 

OdbcCommand對象,兩種不同的查詢......

+0

queryStatement1()返回什麼? –

+0

'queryStatement1()'返回查詢字符串'insert into TABLE(field1,field2 ...)values(?,?,...)' – esausilva

+0

僅供參考,如果您使用的是IBM DB,則可能會得到它們的值本地.NET數據組件。另外'addwithvalue'可能是邪惡的,尤其是對於日期,如果您知道類型,請在參數構造函數中指定它。 –

回答

2

找到了答案。我只需要在將一個不同的查詢字符串分配給命令之前清除命令參數

... 
odbcCommand.ExecuteNonQuery(); 

      odbcCommand.Parameters.Clear(); 
      odbcCommand.CommandText = queryStatement2(); 
...