定时查询数据数据 为 Select * 模式下, 如果数据库增减字段报错。 返回

SqlSugar 沟通中
3 146

       public static SqlSugarClient CreateSqlSugarClient(string connectionStr = connDefault)

       {

           var _client = new SqlSugarClient(new ConnectionConfig()

           {

               ConnectionString = connectionStr,

               DbType = SqlSugar.DbType.Oracle,

               IsAutoCloseConnection = true

           });

           return _client;

       }


       public static DataTable GetDataTableBySql(string sql, string connStr = connDefault)

       {

           var client = CreateSqlSugarClient(connStr);

           return client.Ado.GetDataTable(sql);

       }


       static void Run(CancellationToken token)

       {

           while (!token.IsCancellationRequested)

           {

               try

               {

                   var dt = GetDataTableBySql("select * from table");

                   Console.WriteLine("获取正常.");

               }

               catch (Exception ex)

               {

                   Console.WriteLine("异常:" + ex.Message);

               }

               Task.Delay(500).Wait();

           }

       }


       static void Main(string[] args)

       {

           var cts = new CancellationTokenSource();

           var t = Task.Run(() => Run(cts.Token));

           Console.ReadLine();

           cts.Cancel();

           t.Wait();

       }

异常信息:

{"ORA-01007: 变量不在选择列表中"}

    Data: {System.Collections.ListDictionaryInternal}

    DataSource: ""

    ErrorCode: -2147467259

    Errors: Count = 1

    HResult: -2147467259

    HelpLink: null

    InnerException: null

    IsRecoverable: false

    Message: "ORA-01007: 变量不在选择列表中"

    Number: 1007

    OracleLogicalTransaction: {Oracle.ManagedDataAccess.Client.OracleLogicalTransaction}

    Procedure: ""

    Source: "Oracle Data Provider for .NET, Managed Driver"

    StackTrace: "   at OracleInternal.ServiceObjects.OracleConnectionImpl.VerifyExecution(Int32& cursorId, Boolean bThrowArrayBindRelatedErrors, SqlStatementType sqlStatementType, Int32 arrayBindCount, OracleException& exceptionForArrayBindDML, Boolean& hasMoreRowsInDB, Boolean bFirstIterationDone)\r\n   at OracleInternal.ServiceObjects.OracleCommandImpl.ExecuteReader(String commandText, OracleParameterCollection paramColl, CommandType commandType, OracleConnectionImpl connectionImpl, OracleDataReaderImpl& rdrImpl, Int32 longFetchSize, Int64 clientInitialLOBFS, OracleDependencyImpl orclDependencyImpl, Int64[] scnForExecution, Int64[]& scnFromExecution, OracleParameterCollection& bindByPositionParamColl, Boolean& bBindParamPresent, Int64& internalInitialLOBFS, OracleException& exceptionForArrayBindDML, OracleConnection connection, OracleLogicalTransaction& oracleLogicalTransaction, IEnumerable`1 adrianParsedStmt, Boolean isDescribeOnly, Boolean isFromEF)\r\n   at Oracle.ManagedDataAccess.Client.OracleCommand.Ex

ecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)\r\n   at Oracle.ManagedDataAccess.Client.OracleDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)\r\n   at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet)\r\n   at SqlSugar.AdoProvider.GetDataSetAll(String sql, SugarParameter[] parameters)\r\n   at SqlSugar.AdoProvider.GetDataTable(String sql, SugarParameter[] parameters)\r\n   at ConsoleSqlSugar.Program.GetDataTableBySql(String sql, String connStr) in  \r\n   at ConsoleSqlSugar.Program.Run(CancellationToken token) in "

    TargetSite: {Int32 VerifyExecution(Int32 ByRef, Boolean, OracleInternal.Common.SqlStatementType, Int32, Oracle.ManagedDataAccess.Client.OracleException ByRef, Boolean ByRef, Boolean)}


找了文档,没有解决办法, 这个是不支持每次获取最新表字段, 不缓存吗. 


热忱回答3

  • Oracle DataTable驱动是有缓存的。这个无解。。只能手动处理。 这个驱动BUG

    0 回复
  •  Oracle官方也一直没有修复

    0 回复
  • 技巧方案: select  /* 随机数*/  * from table 这样

    0 回复