首页 > 解决方案 > 找不到 ID 为 [xx] 的查询

问题描述

通过 .Net Core 中的 ODBC 连接运行 SQL DDL 语句时出现错误。

我正在使用通过 OdbcConnection (System.Data.Odbc v4.5.0) 从 .Net Core (v2.2) 连接的全新默认 Ignite (v2.7) 实例。

堆栈跟踪:

2019-56-04 10:56:57.622 [ERROR] CREATE TABLE X (Id varchar(255) not null, Value int, PRIMARY KEY (Id));CREATE TABLE Y (Id varchar(255) not null, Value int, PRIMARY KEY (Id));
2019-56-04 10:56:57.710 [ERROR] ERROR [HY000] Failed to find query with ID: 0
2019-56-04 10:56:57.718 [ERROR]    at System.Data.Odbc.OdbcDataReader.NextResult(Boolean disposing, Boolean allresults)
   at System.Data.Odbc.OdbcDataReader.FirstResult()
   at System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior behavior, String method, Boolean needReader, Object[] methodArguments, SQL_API odbcApiMethod)
   at System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior behavior, String method, Boolean needReader)
   at System.Data.Odbc.OdbcCommand.ExecuteNonQuery()
   at System.Data.Common.DbCommand.ExecuteNonQueryAsync(CancellationToken cancellationToken)

我注意到,如果我将这两个语句分成对 ExecuteNonQuery 的单独调用,它确实有效,所以我假设 Ignite 在影响记录数时不喜欢多个语句。

我从 v2.3 中发现了一个类似的问题,但我认为这是不同的,我在 v2.7 中得到了它。

复制器:

using System;
using System.Data.Odbc;

namespace IgniteMultistatementReproducer {
    internal class Program {
        private static void Main(string[] args) {
            try {
                using (var conn = new OdbcConnection($"DRIVER={{Apache Ignite}};ADDRESS=localhost:10800;")) {
                    conn.Open();
                    var cmd = new OdbcCommand {
                        CommandText = "CREATE TABLE X (Id varchar(255) not null, Value int, PRIMARY KEY (Id));CREATE TABLE Y (Id varchar(255) not null, Value int, PRIMARY KEY (Id));",
                        Connection = conn
                    };
                    var numRecordsAffected = cmd.ExecuteNonQuery();
                    Console.WriteLine($"Num Records Affected: {numRecordsAffected}");
                }
            } catch (Exception ex) {
                Console.WriteLine(ex);
            }
        }
    }
}

标签: c#odbcignite

解决方案


推荐阅读