Parameter/Column (2) not bound Exception when connecting C# application to SAP HANA database

Parameter/Column (2) not bound Exception when connecting C# application to SAP HANA database


我正在创建一个连接到 SAP HANA 2.0 数据库的 C# 应用程序。
在我的电脑上,我安装了 HDBODBC 和 HDBODBC32 驱动程序,都是 2.02 版本。
我想做的是创建一个查询,其中有一个在不同场合引用的参数。
这是示例代码:

string query = "SELECT :p0, :p0 FROM DUMMY";
IDbCommand dbCommand = hanaConnection.CreateCommand();

dbCommand.CommandText = query;

IDataParameter param = dbCommand.CreateParameter();
param.Value = "A";
param.ParameterName = ":p0"; 

dbCommand.Parameters.Add(param);

hanaConnection.Open();

IDataReader dataReader = dbCommand.ExecuteReader();

while (dataReader.Read())
{
    ReadSingleRow((IDataRecord)dataReader);
}

为了更清楚,对象 hanaConnection 实现了 IDbConnection.

当我执行语句 IDataReader dataReader = dbCommand.ExecuteReader(); 时出现异常:

Sap.Data.Hana.HanaException
HResult=0x80004005
Message=Parameter/Column (2) not bound.
Source=SAP HANA Data Provider for Microsoft ADO.NET
StackTrace:
   at Sap.Data.Hana.HanaCommand._ExecuteReader(CommandBehavior commandBehavior, Boolean isExecuteScalar, Boolean isBeginExecuteReader)
   at Sap.Data.Hana.HanaCommand.ExecuteReaderBatch(CommandBehavior behavior)
   at Sap.Data.Hana.HanaCommand.ExecuteDbDataReader(CommandBehavior behavior)
   at System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader()
   ...

我试图在 Hana Studio 中创建执行纯 sql 命令,以了解是否可以在 SELECT 语句中多次引用参数,我得到了正确的结果。
这是我执行的 sql 语句:

CREATE PROCEDURE PROC (IN var1 INT, IN var2 INT)
AS
BEGIN
   SELECT :var1, :var2, :var2 FROM DUMMY;
END;

CALL PROC (var1=>1, var2=>2);

为什么使用.NET odbc接口会出现异常?是有人参与的行为吗?我是否必须创建多个参数,即使它们具有相同的类型和值?

谢谢

SAP HANA ADO.net 驱动程序不支持 SQL 语句的命名参数。 相反,它使用在语句文本中显示为问号 (?) 的位置参数。

请参阅有关 SAP HANA Data Provider for Microsoft ADO.NET API Reference/HanaParameter class/ParameterName property 的参考文档。

根据您的要求,这意味着您必须为语句中每次出现的应该具有相同值的参数绑定相同的值。

请注意,SQL脚本只支持命名参数,这就是为什么您的过程示例代码可以正常运行的原因。
顺便说一句:如果您只是想快速试用 SQL 脚本代码,您可以使用 匿名块 而不是创建过程。