Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将参数与OdbcDataAdapter一起使用时出错_C#_Ado.net_Odbc - Fatal编程技术网

C# 将参数与OdbcDataAdapter一起使用时出错

C# 将参数与OdbcDataAdapter一起使用时出错,c#,ado.net,odbc,C#,Ado.net,Odbc,这有点奇怪,但我面临的问题确实不是预期的行为 考虑以下功能: public static System.Data.DataSet getDataSet(string cmdStr, System.Collections.Hashtable parameters) { OdbcDataAdapter adap = new OdbcDataAdapter(cmdStr, getConnection()); foreach (object o

这有点奇怪,但我面临的问题确实不是预期的行为

考虑以下功能:

 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命令。 对于EG,考虑代码:

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;

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

我终于找到了链接中给出的解决方案


Odbc接口仅识别@named变量的使用?这些都是由立场决定的。您可以使用?Param1,?Param 2以提高可读性,但位置就是所使用的全部。

我终于找到了链接中给出的解决方案

Odbc接口仅识别@named变量的使用?这些都是由立场决定的。为了可读性,可以使用?Param1,?Param 2,但位置是所使用的全部