C# Sybase“;主机变量的值不足“;多套

C# Sybase“;主机变量的值不足“;多套,c#,odbc,sybase,sqlanywhere,C#,Odbc,Sybase,Sqlanywhere,当使用多个用于设置局部变量的参数执行查询时,我遇到以下错误: iAnywhere.Data.SQLAnywhere.SAException(0x80004005):主机变量的值不足 我使用OdbcConnection或SAConnection得到相同的错误 var connection = new SAConnection(connectionString); connection.Open(); var transaction = connection.BeginTransaction();

当使用多个用于设置局部变量的参数执行查询时,我遇到以下错误:

iAnywhere.Data.SQLAnywhere.SAException(0x80004005):主机变量的值不足

我使用OdbcConnection或SAConnection得到相同的错误

var connection = new SAConnection(connectionString);
connection.Open();
var transaction = connection.BeginTransaction();

string sql = @"
DECLARE @A int
DECLARE @B int
SET @A = ?
SET @B = ?
";

var command = new SACommand(sql, connection, transaction);

var param1 = new SAParameter();
param1.Value = 1;
command.Parameters.Add(param1);

var param2 = new SAParameter();
param2.Value = 2;
command.Parameters.Add(param2);

command.ExecuteNonQuery();
如果只有一个参数,查询将正常执行:

DECLARE @A int
DECLARE @B int
SET @A = ?
SET @B = 42
我在Sybase Anywhere 12.0.1.3942服务器上运行这个

更新:经过多次测试后,我注意到在同一查询中有多个参数化语句时会发生这种情况。这也会产生以下错误:

SELECT ?
SELECT ?
SA数据库引擎中显然存在以下问题:

批内允许主机变量引用,但有以下限制:

  • 批处理中只有一条语句可以引用主机变量
  • 使用主机变量的语句前面不能有返回结果集的语句
一种可能的解决方法是在使用所有主机变量(参数)之前,在一条语句中选择将所有主机变量(参数)转换为局部变量:

BEGIN
    DECLARE @id INT;
    DECLARE @name NVARCHAR;
    DECLARE @comment NCARCHAR;
    SELECT :id, :name, :comment INTO @id, @name, @comment;
END;