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'"在此上下文中不有效。

DB2 ERROR [07004] SQL0313N

最后我找到了两种解决问题的方法。

  1. 使用未命名参数"?"代替参数名":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. 激活类DB2ConnectionStringBuilder的HostVarParameters属性,原始代码保持不变(保持使用命名参数)。

我的2美分,
杂志