C# 参数化查询的问题
ODBC中的参数化查询在我处理SQLClient对象时通常会出现问题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
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));