.net 参数/列(2)未绑定将C#应用程序连接到SAP HANA数据库时出现异常

0h4hbjxa  于 2023-01-31  发布在  .NET
关注(0)|答案(1)|浏览(346)

我正在创建连接到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
H结果= 0x80004005
消息=参数/列(2)未绑定。
来源=适用于Microsoft ADO. NET的SAP HANA数据提供程序
堆栈跟踪:
位于Sap.Data.Hana.HanaCommand._ExecuteReader(命令行为命令行为,布尔值为执行标量,布尔值为开始执行读取器)
位于Sap. Data. Hana. HanaCommand.执行读取器批处理(命令行为行为)
位于Sap. Data. Hana. HanaCommand. ExecuteDbDataReader(命令行为行为)
在系统.数据.公共.数据库命令.系统.数据. IDb命令.执行读取器()
...
我尝试在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接口会出现异常?这是预期的行为吗?即使它们具有相同的类型和值,我也必须创建多个参数吗?
谢谢

dldeef67

dldeef671#

SAP HANAADO.net驱动程序不支持SQL语句的命名参数,而是使用在语句文本中显示为问号(?)的位置参数。
请参阅SAP HANA Data Provider for Microsoft ADO.NET API Reference/HanaParameter class/ParameterName property的参考文档。
对于您的要求,这意味着您必须为语句中应该具有相同值的参数的每次出现绑定相同的值。
请注意,SQLScript只支持命名参数,这就是过程示例代码可以正常工作的原因。
顺便说一句:如果您只是想快速试用SQLScript代码,可以使用匿名块来代替创建过程。

相关问题