定时任务中的Sql报错 返回
在ASP.Net Core Web Api中通过后台服务(BackgroundService)运行定时任务,经常出现Sql错误(每天有两三次);请帮忙分析一下,
var timerCaller = new System.Timers.Timer
{
AutoReset = true,
Enabled = true,
Interval = 60 * 1000 //1分钟
};
timerCaller.Elapsed += OnCallerEventAsync;
定时任务共有三个Sql,都产生过报错;其它所有服务和后台服务的Sql都正常;
SqlSugar是最新版本;数据库是Sqlite
Microsoft.Data.Sqlite和Microsoft.Data.Sqlite.Core是9.0.0;目标框架是.Net 8.0
1、db.GetConnectionScope(Base.Db).Queryable<Models.RMqttDeviceBind>().ToList();
MyHandler caught : System.Exception: 中文提示 : TownId绑定到MqttDevice失败,可以试着换一个类型,或者使用ORM自定义类型实现
English Message : MqttDevice TownId bind error
at SqlSugarEntity(IDataRecord)
at SqlSugar.IDataReaderEntityBuilder`1.Build(IDataRecord dataRecord)
at SqlSugar.DbBindAccessory.GetEntityList[T](SqlSugarProvider context, IDataReader dataReader)
at SqlSugar.DbBindProvider.DataReaderToList[T](Type type, IDataReader dataReader)
at SqlSugar.QueryableProvider`1.GetData[TResult](Boolean isComplexModel, Type entityType, IDataReader dataReader)
at SqlSugar.QueryableProvider`1.GetData[TResult](KeyValuePair`2 sqlObj)
at SqlSugar.QueryableProvider`1._ToList[TResult]()
at SqlSugar.QueryableProvider`1.ToList()
at NComServer.Mqtt.MqttAutoTask.OnCallerEventAsync(Object source, ElapsedEventArgs e)
at System.Threading.Tasks.Task.<>c.<ThrowAsync>b__128_1(Object state)
at System.Threading.QueueUserWorkItemCallback.Execute()
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading.PortableThreadPool.WorkerThread.WorkerThreadStart() |
2、db.GetConnectionScope(Base.Db).Queryable<Models.MqttDevice>().ToList();
MyHandler caught : System.ObjectDisposedException: Cannot access a disposed object.
Object name: 'SQLitePCL.sqlite3_stmt'.
at System.StubHelpers.StubHelpers.SafeHandleAddRef(SafeHandle pHandle, Boolean& success)
at SQLitePCL.SQLite3Provider_e_sqlite3.NativeMethods.sqlite3_column_count(sqlite3_stmt stmt)
at Microsoft.Data.Sqlite.SqliteDataRecord.GetName(Int32 ordinal)
at SqlSugar.DbBindAccessory.GetDataReaderNames(IDataReader dataReader, String& types)
at SqlSugar.DbBindAccessory.GetEntityList[T](SqlSugarProvider context, IDataReader dataReader)
at SqlSugar.DbBindProvider.DataReaderToList[T](Type type, IDataReader dataReader)
at SqlSugar.QueryableProvider`1.GetData[TResult](Boolean isComplexModel, Type entityType, IDataReader dataReader)
at SqlSugar.QueryableProvider`1.GetData[TResult](KeyValuePair`2 sqlObj)
at SqlSugar.QueryableProvider`1._ToList[TResult]()
at SqlSugar.QueryableProvider`1.ToList()
at NComServer.Mqtt.MqttAutoTask.OnCallerEventAsync(Object source, ElapsedEventArgs e) in E:\Develop\NCom\NComServer\NComServer\Mqtt\MqttAutoTask.cs:line 77
at System.Threading.Tasks.Task.<>c.<ThrowAsync>b__128_1(Object state)
at System.Threading.QueueUserWorkItemCallback.Execute()
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading.PortableThreadPool.WorkerThread.WorkerThreadStart() |
MyHandler caught : System.InvalidOperationException: Invalid attempt to call FieldCount when reader is closed.
at Microsoft.Data.Sqlite.SqliteDataReader.get_FieldCount()
at SqlSugar.DbBindAccessory.GetDataReaderNames(IDataReader dataReader, String& types)
at SqlSugar.DbBindAccessory.GetEntityList[T](SqlSugarProvider context, IDataReader dataReader)
at SqlSugar.DbBindProvider.DataReaderToList[T](Type type, IDataReader dataReader)
at SqlSugar.QueryableProvider`1.GetData[TResult](Boolean isComplexModel, Type entityType, IDataReader dataReader)
at SqlSugar.QueryableProvider`1.GetData[TResult](KeyValuePair`2 sqlObj)
at SqlSugar.QueryableProvider`1._ToList[TResult]()
at SqlSugar.QueryableProvider`1.ToList()
at NComServer.DALs.MqttDevice.GetAll(SqlSugarScope db) in E:\Develop\NCom\NComServer\NComServer\DALs\MqttDevice.cs:line 29
at NComServer.Mqtt.MqttAutoTask.OnCallerEventAsync(Object source, ElapsedEventArgs e) in E:\Develop\NCom\NComServer\NComServer\Mqtt\MqttAutoTask.cs:line 61
at System.Threading.Tasks.Task.<>c.<ThrowAsync>b__128_1(Object state)
at System.Threading.QueueUserWorkItemCallback.Execute()
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading.PortableThreadPool.WorkerThread.WorkerThreadStart() |
3、db.GetConnectionScope(Base.Db).Insertable(command).ExecuteCommand();
时间同步异常:System.NullReferenceException: Object reference not set to an instance of an object.
at Microsoft.Data.Sqlite.SqliteConnection.Close()
at SqlSugar.AdoProvider.Close()
at SqlSugar.AdoProvider.ExecuteCommand(String sql, SugarParameter[] parameters)
at SqlSugar.InsertableProvider`1.ExecuteCommand()
at NComServer.DALs.MqttCommand.Create(SqlSugarScope db, MqttCommand command, String OperatorId) in E:\Develop\NCom\NComServer\NComServer\DALs\MqttCommand.cs:line 25
at NComServer.Mqtt.MqttAutoTask.SendTime() in E:\Develop\NCom\NComServer\NComServer\Mqtt\MqttAutoTask.cs:line 136 |
热忱回答(3)
-
fate sta VIP0
2025/7/24Cannot access a disposed object.
这个是线程安全问题
0 回复 -
fate sta VIP0
2025/7/240 回复 -
沪 VIP0
2025/7/25@fate sta:非常感谢!通过db.CopyNew().GetConnection(),目前看起来运行已经正常!问题已经解决
0 回复