2013-05-10 19 views
1

它有點奇怪,但我面臨的問題實際上不是預期的行爲。使用OdbcDataAdapter參數時出錯

考慮以下功能:

public static System.Data.DataSet getDataSet(string cmdStr, System.Collections.Hashtable parameters) 
    { 
     OdbcDataAdapter adap = new OdbcDataAdapter(cmdStr, getConnection());   
     foreach (object obj in parameters.Keys) 
     {     
      adap.SelectCommand.Parameters.AddWithValue(obj.ToString(), parameters[obj]); 
     } 
     System.Data.DataSet ds = new System.Data.DataSet(); 
     adap.Fill(ds); 
     return ds; 
    } 

我用這個函數來執行有一些參數的任何SQL命令。 對於例如,考慮代碼:

string qryStr = "exec bitss_savePaymentData " + 
           "@[email protected]," + 
           "@[email protected]," + 
           "@[email protected]"; 
       System.Collections.Hashtable ht = new System.Collections.Hashtable(); 
       ht.Add("@cdate", DateTime.Now.Date); 
       ht.Add("@AMOUNT", 100); 
       ht.Add("@payid", 101); 
       DataSet ds=getDataSet(qryStr, ht); 

問題: 上面的代碼拋出一個異常「必須聲明標量變量@cdate」。如果我使用SQLDataAdapter而不是OdbcDataAdapter,則相同的代碼有效。

任何想法我在這裏想念什麼?

我甚至試過這樣:

string ConnectionString = "dsn=mysql;uid=sa;DATABASE=userdb;"; 
string qryStr = "insert into info(code) values(@code);"; 
OdbcConnection con = new OdbcConnection(ConnectionString); 
OdbcCommand cmd = new OdbcCommand(qryStr,con); 
cmd.Parameters.Add("@code", System.Data.Odbc.OdbcType.Int).Value = "999"; 
cmd.Connection.Open(); 
OdbcDataReader odbcdtr = cmd.ExecuteReader();//exception "must declare the scalar variable @code" 
con.Close; 

我無法找出異常在上面的代碼中來的原因。

回答

1

我終於找到了在this鏈接中給出的解決方案。

Odbc接口不能識別使用@named變量,只有?這是根據位置採取的。爲了便於閱讀,您可以使用?Param1,?Param 2,但該位置就是所有使用的。

相關問題