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;
我無法找出異常在上面的代碼中來的原因。