Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/88.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# 参数化查询的问题_C#_Sql_Db2_Odbc_Parameterized Query - Fatal编程技术网

C# 参数化查询的问题

C# 参数化查询的问题,c#,sql,db2,odbc,parameterized-query,C#,Sql,Db2,Odbc,Parameterized Query,ODBC中的参数化查询在我处理SQLClient对象时通常会出现问题 using (OdbcConnection conn = new OdbcConnection()) { conn.ConnectionString = myConnectionString; conn.Open(); using (OdbcCommand comm = new OdbcCommand()) { comm.Connection = conn; c

ODBC中的参数化查询在我处理SQLClient对象时通常会出现问题

using (OdbcConnection conn = new OdbcConnection())
{
    conn.ConnectionString = myConnectionString;
    conn.Open();

    using (OdbcCommand comm = new OdbcCommand())
    {
        comm.Connection = conn;
        comm.CommandText = "SELECT MYTABLE.MYCOLUMN FROM MYSCHEMA.MYTABLE WHERE MYCOLUMN = @MYPARAM";
        comm.Parameters.Add(new OdbcParameter("@MYPARAM",myValue));

        using (OdbcDataReader reader = comm.ExecuteReader)
        {
            //do stuff
        } 
    }
}
我得到的信息是

错误[42S22][IBM][CLI Driver][DB2/AIX64]SQL0206N“@MYPARAM”不正确 在使用它的上下文中有效。SQLSTATE=42703

但是如果我使用的是SQLClient名称空间,我可以在上面的任何地方用
Sql
替换
Odbc
,而且效果很好。我错过了什么?

来自

ODBC.NET提供程序使用位置参数而不是命名参数 在语法中用问号(?)标记的参数 命令文本。OdbcParameterCollection中的参数对象和 存储过程接受的实际参数,或 参数化SQL语句根据 OdbcParameter对象插入到 集合,而不是按参数名

这就是为什么你应该使用你的参数作为

comm.CommandText = @"SELECT MYTABLE.MYCOLUMN FROM MYSCHEMA.MYTABLE
                     WHERE MYCOLUMN = ?";
comm.Parameters.Add(new OdbcParameter("@MYPARAM",myValue));
实际上,写什么参数名并不重要,因为真正重要的是
OdbcParameter
参数的顺序

这就是为什么这两条底线都适用于
CommandText
,因为您只有一个参数
:-)


我也有类似的问题。通过从SQL中删除注释解决了此问题(例如,
——一些注释
)。
comm.Parameters.Add(new OdbcParameter("user2320861",myValue));
comm.Parameters.Add(new OdbcParameter("meaningless string",myValue));