C# SqlQuery返回ora-00911无效字符,尽管生成的查询在Oracle数据库中运行良好

C# SqlQuery返回ora-00911无效字符,尽管生成的查询在Oracle数据库中运行良好,c#,oracle,linq,entity-framework-6,C#,Oracle,Linq,Entity Framework 6,我正在尝试从oracle数据库11g获取下一个序列号。我使用了不同的方法从数据库中获取数据,但仍然显示无效字符。生成的相同查询在oracle数据库上运行良好。 主键sequenceId、sequenceNumber。在每个sequenceId上都有一个单独的计数器。我使用的泛型类型tenty将由controllerl传递 public virtual async Task<BaseResult<int>> GetNextSequenceAsync(string seque

我正在尝试从oracle数据库11g获取下一个序列号。我使用了不同的方法从数据库中获取数据,但仍然显示无效字符。生成的相同查询在oracle数据库上运行良好。 主键sequenceId、sequenceNumber。在每个sequenceId上都有一个单独的计数器。我使用的泛型类型tenty将由controllerl传递

public virtual async Task<BaseResult<int>> GetNextSequenceAsync(string sequenceId)
        {
            var sequenceIdField = typeof(SequenceIdDatabaseFields).GetField(typeof(TEntity).Name).GetValue(null);
            var table = typeof(SequenceDatabaseTable).GetField(typeof(TEntity).Name).GetValue(null);
            var column = typeof(SequenceDatabaseColumn).GetField(typeof(TEntity).Name).GetValue(null);
            //var query = new OracleCommand("SELECT NVL(MAX(" + column  + ") + 1, 1) AS "+ column+" FROM "+ table+" WHERE "+ sequenceIdField+" = '"+ sequenceId + "';");
            var query = "SELECT NVL(MAX(" + column + ") + 1, 1) AS " + column + " FROM " + table + " WHERE " + sequenceIdField + " = '" + sequenceId + "';";
            //var nextValue = int.Parse(query.ExecuteScalar().ToString());
            var nextValue = await _context.Database.SqlQuery<int>(query).FirstAsync().ConfigureAwait(false);
            return GetBaseResult(nextValue, ResultTypes.Ok);
        }

@Marmite轰炸机击中了目标。做梦也没想到这会是个问题。 我在删除;后执行了查询;。它工作得很好

var query = "SELECT NVL(MAX(" + column + ") + 1, 1) AS " + column + " FROM " + table + " WHERE " + sequenceIdField + " = '" + sequenceId + "'";

您是否可以发布完整的查询,就像传递到服务器时一样?查询的确切值是多少?请检查其他答案,以确定您是否应该删除尾随的分号…+sequenceId+';从您的查询字符串。是的,从IDE运行带有分号的查询是可以的;SQL没有分号。客户端工具将其用作分隔符,但不会将其发送到数据库。
var query = "SELECT NVL(MAX(" + column + ") + 1, 1) AS " + column + " FROM " + table + " WHERE " + sequenceIdField + " = '" + sequenceId + "'";