使用OdbcDataAdapter参数时出错

本文关键字:出错 参数 OdbcDataAdapter 使用 | 更新日期: 2023-09-27 18:13:11

这有点奇怪,但我正面临一个问题,这真的不是一个预期的行为。

考虑以下函数:

 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 " +
                                "@cdate=@cdate," +
                                "@payid=@payid," +
                                "@AMOUNT=@AMOUNT";
                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;

我无法弄清楚上面代码中出现异常的原因。

使用OdbcDataAdapter参数时出错

我终于找到了这个链接给出的解决方案。

Odbc接口不识别@named变量的使用,只有?这是由位置决定的。您可以使用?Param1, ?Param 2来提高可读性,但是位置是唯一使用的