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

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)
-
fate sta VIP0
1周前Oracle DataTable驱动是有缓存的。这个无解。。只能手动处理。 这个驱动BUG
0 回复 -
fate sta VIP0
1周前Oracle官方也一直没有修复
0 回复 -
fate sta VIP0
1周前技巧方案: select /* 随机数*/ * from table 这样
0 回复