DB2 ERROR [07004] SQL0313N
本文关键字:SQL0313N 07004 ERROR DB2 | 更新日期: 2023-09-27 18:10:25
我是DB2世界的新手,我使用:
DB2 Data Provider for .NET (IBM.Data.DB2.dll version 9.7.4.4)
c# VS2010 with .NET Framework 4.0
我对使用参数的查询有问题。我的代码片段:
DB2Command cmd = new DB2Command(); cmd.CommandText = "SELECT COUNT(*) FROM CUSTOMERS t0 WHERE (t0.'"CITY'" < :p0)"; cmd.Connection = Db2Connection; DB2Parameter param = cmd.CreateParameter(); param.DB2Type = DB2Type.VarChar; param.ParameterName = ":p0"; param.Value = "Seattle"; var p = cmd.Parameters.Add(param); var execResult = cmd.ExecuteScalar();
我得到以下错误的cmd.ExecuteScalar():
EXECUTE语句中变量的个数OPEN语句中的变量,或OPEN语句中的参数数量参数化游标的语句不等于的数目所需的值。SQLSTATE = 07004
请帮忙解决这个问题。提前谢谢你。
附加信息:
1. 我刚刚尝试使用IBM Data Studio使用查询编辑器验证DB2命令。它不识别参数的前缀"@"。所以我使用了像神谕一样的前缀":"。它的工作原理。但是我的c#代码仍然会抛出错误[07004]SQL0313N
2. 如果我在c#代码中不使用任何参数前缀,我得到ERROR [42703] [IBM][DB2/NT64] SQL0206N '"P0'"在此上下文中不有效。
最后我找到了两种解决问题的方法。
-
使用未命名参数"?"代替参数名":p0"。
DB2Command cmd = new DB2Command(); cmd.CommandText = "SELECT COUNT(*) FROM CUSTOMERS t0 WHERE (t0.'"CITY'" < ?)"; cmd.Connection = Db2Connection; DB2Parameter param = cmd.CreateParameter(); param.DB2Type = DB2Type.VarChar; param.ParameterName = "param1"; param.Value = "Seattle"; var p = cmd.Parameters.Add(param); var execResult = cmd.ExecuteScalar();
-
激活类DB2ConnectionStringBuilder的HostVarParameters属性,原始代码保持不变(保持使用命名参数)。
我的2美分,
杂志