为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DM8
【操作系统】:linux
【CPU】:x64
【问题描述】*:.net core 5.0应用 从mysql迁移 达梦,使用EFCore.DM 5.0.1 数据插入保存 在windows开发环境正常,部署到linux环境后总报异常:Dm.DmException (0x80004005): the char is not a digit
at Dm.DmCommand.do_ExecuteDbDataReader(CommandBehavior behavior)
详细跟踪如下 :
INSERT INTO "DMIHBASE"."T_Base_User_LoginLog" ("Id", "CJRY", "CJRYMC", "CJSJ", "DLSJ", "DLYHID", "DL_OPENID", "IsDeleted", "YLJGUUID", "XGRY", "XGRYMC", "XGSJ")
VALUES (:p0, :p1, :p2, :p3, :p4, :p5, :p6, :p7, :p8, :p9, :p10, :p11);
fail: 2025/4/28 15:47:49.773 RelationalEventId.CommandError[20102] (Microsoft.EntityFrameworkCore.Database.Command)
Failed executing DbCommand (77ms) [Parameters=[:p0='b20fb585-99c7-4211-8340-f7415b5862ad' (Nullable = false) (Size = 36), :p1='00000000-0000-0000-0000-000000000000' (Nullable = false) (Size = 36), :p2='System' (Nullable = false) (Size = 6), :p3='2025-04-28T15:47:49.3394666+08:00', :p4='2025-04-28T15:47:48.5734683+08:00', :p5='8a821002-92ec-4fd2-b2bc-f4df9b8a768c' (Size = 36), :p6='o4RyQ5U3HId8KBWDtgH-frGo_Gho' (Size = 28), :p7='0', :p8='2b9e538d-fc03-11eb-b0ae-005056a51f06' (Nullable = false) (Size = 36), :p9='00000000-0000-0000-0000-000000000000' (Size = 36), :p10='System' (Size = 6), :p11='2025-04-28T15:47:49.3394666+08:00' (Nullable = true)], CommandType='Text', CommandTimeout='30']
INSERT INTO "DMIHBASE"."T_Base_User_LoginLog" ("Id", "CJRY", "CJRYMC", "CJSJ", "DLSJ", "DLYHID", "DL_OPENID", "IsDeleted", "YLJGUUID", "XGRY", "XGRYMC", "XGSJ")
VALUES (:p0, :p1, :p2, :p3, :p4, :p5, :p6, :p7, :p8, :p9, :p10, :p11);
2025-04-28 15:47:49.835 [Error] [Microsoft.EntityFrameworkCore.Update] An exception occurred in the database while saving changes for context type 'XYS.NetHospital.EntityFramework.Core.IhBaseDmDbContext'.
Microsoft.EntityFrameworkCore.DbUpdateException: An error occurred while updating the entries. See the inner exception for details.
---> Dm.DmException (0x80004005): the char is not a digit
异常可能是因为P7参数 IsDeleted 数据库中为tinyint 传入'0'不会认为是数值???
有什么解决办法吗??
在管理工具中,用sysdba 用户执行
sp_set_para_value(1,'SVR_LOG',1)
执行报错的程序,重现问题;
SQL日志会记录执行的SQL语句,然后日志文件默认在达梦数据库软件安装目录下的log目录下命名是dmsql开头,像dmsql_DMSERVER_20220719XXXXX.log,数据库执行的所有语句都会记录在里面,看看具体执行了什么语句报错??
跟踪完毕后用sysdba 用户执行
sp_set_para_value(1,'SVR_LOG',0)
关闭日志,以防磁盘空间被写满