简体   繁体   English

DB2错误[07004] SQL0313N

[英]DB2 ERROR [07004] SQL0313N

I am a newbie in DB2 world and am using: 我是DB2世界中的新手,正在使用:
- DB2 Data Provider for .NET (IBM.Data.DB2.dll version 9.7.4.4) -用于.NET的DB2数据提供程序(IBM.Data.DB2.dll版本9.7.4.4)
- C# VS2010 with .NET Framework 4.0 -具有.NET Framework 4.0的C#VS2010

I have problem with query that uses parameter. 我对使用参数的查询有疑问。 My code snippet: 我的代码段:

 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(); 

I get following error on cmd.ExecuteScalar(): 我在cmd.ExecuteScalar()上收到以下错误:

The number of variables in the EXECUTE statement, the number of variables in the OPEN statement, or the number of arguments in an OPEN statement for a parameterized cursor is not equal to the number of values required. 对于参数化游标,EXECUTE语句中的变量数,OPEN语句中的变量数或OPEN语句中的参数数不等于所需的值数。 SQLSTATE=07004 SQLSTATE = 07004

Please help how to fix the problem. 请帮助解决问题。 Thank you in advance. 先感谢您。

Additional information: 附加信息:
1. I just tried to use IBM Data Studio to verify the DB2 command using query editor. 1.我只是尝试使用IBM Data Studio通过查询编辑器来验证DB2命令。 It doesn't recognize the prefix "@" for parameter. 它无法识别参数的前缀“ @”。 So I use oracle-liked prefix ":" for it. 因此,我使用了类似于oracle的前缀“:”。 It works. 有用。 But my C# code still raises the error [07004] SQL0313N 但是我的C#代码仍然引发错误[07004] SQL0313N
2. If I don't use any prefix for parameter on my C# code, I get ERROR [42703] [IBM][DB2/NT64] SQL0206N \\"P0\\" is not valid in this context. 2.如果我在C#代码上未对参数使用任何前缀,则会收到错误[42703] [IBM] [DB2 / NT64] SQL0206N \\“ P0 \\”在此上下文中无效。

Finally I find out 2 ways to fix the problem. 最后,我找到了两种解决问题的方法。

  1. Using unnamed parameter "?" 使用未命名的参数“?” instead of parameter name ":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(); 
  2. Activate HostVarParameters property of class DB2ConnectionStringBuilder and the original code remains unchanged (keeping using named parameters). 激活类DB2ConnectionStringBuilder的HostVarParameters属性,原始代码保持不变(使用命名参数进行保存)。

My 2 cents, 我的2美分
Mag 马格

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM