参数/列未绑定将C#应用程序连接到SAP HANA数据库时出现异常
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了参数/列未绑定将C#应用程序连接到SAP HANA数据库时出现异常相关的知识,希望对你有一定的参考价值。
我正在创建一个连接到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语句的命名参数。相反,它使用位于语句文本中的位置参数作为问号(?
)。
对于您的要求,这意味着您必须为应该具有相同值的语句中每次出现的参数绑定相同的值。
请注意,SQLScript仅支持命名参数,这就是您的过程示例代码无故障运行的原因。 顺便说一句:如果您只想快速尝试SQLScript代码,可以使用匿名块而不是创建过程。
以上是关于参数/列未绑定将C#应用程序连接到SAP HANA数据库时出现异常的主要内容,如果未能解决你的问题,请参考以下文章
如何在 T-SQL 查询中针对连接到 SAP-HANA 的链接服务器使用“占位符”?
SAP HANA SQL - 将单个列的多个结果行合并为单个行