达梦数据库使用是select中的常量报错, 但是Mysql是正常的 返回

SqlSugar 沟通中
9 590
该叫什么 Mr.T 发布于2026/3/18
悬赏:0 飞吻

TJCS can't  convert string to decimal   at SqlSugar.IDataReaderEntityBuilder`1.CheckType(List`1 invalidTypes, String bindProperyTypeName, String validPropertyType, String propertyName)   at SqlSugar.IDataReaderEntityBuilder`1.BindMethod(ILGenerator generator, EntityColumnInfo columnInfo, Int32 ordinal)   at SqlSugar.IDataReaderEntityBuilder`1.BindField(ILGenerator generator, LocalBuilder result, EntityColumnInfo columnInfo, String fieldName)   at SqlSugar.IDataReaderEntityBuilder`1.CreateBuilder(Type type)   at SqlSugar.DbBindAccessory.<>c__DisplayClass4_0`1.<GetEntityList>b__1()   at SqlSugar.ReflectionInoCore`1.GetOrCreate(String cacheKey, Func`1 create)   at SqlSugar.ReflectionInoCacheService.GetOrCreate[V](String cacheKey, Func`1 create, Int32 cacheDurationInSeconds)   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()


报错信息如上



= repository
    .DbContext.<>()
    .<>((, ) => .xx== .xx && .yy== .yy)
    .(
        (, ) =>
            .(.zz))
    .(
        (, ) =>
            {
                a= .a,
                b= .b,
                TJCS = .TJCS,
                c= .c,}
    )
    .();



语句结构如上, 其中TJCS字段都定义为decimal, 且m.TJCS也是decimal类型, 经过调试在

IDataReaderEntityBuilder

中获取到的列信息都是VARCHAR


image.png

热忱回答9

  • fate sta fate sta VIP0
    2026/3/18

     提供具体错误提示

    0 回复
  • Mr.T Mr.T VIP0
    2026/3/18

    TJCS can't  convert string to decimal   这个就是异常错误的提示信息

    0 回复
  • Mr.T Mr.T VIP0
    2026/3/18

    我调试发现是这种在select中使用的变量在达梦数据库所返回的DataRecord中的列类型都是VARCHAR, 而不是对应字段的类型, 导致了这个异常

    0 回复
  • fate sta fate sta VIP0
    2026/3/18

    DataRecord 是基于达梦的驱动。处理的。

    0 回复
  • fate sta fate sta VIP0
    2026/3/18

    正常不会是varchar。你换成numer(18,6)类型试试

    0 回复
  • Mr.T Mr.T VIP0
    2026/3/18
    SELECT  "S"."C" AS "C" , :Const5 AS "D" , :Const6 AS "TJCS"  FROM "S" Left JOIN  "Z" ON (( "S"."X" = "Z"."X" ) AND ( "S"."DWFD" = "Z"."DWFD" ))   WHERE (((("S"."L" IN ('0','1')) AND( "S"."A" = :A )) AND ( "S"."B" = :B )) AND ( "Z"."BH" IS NOT NULL ))  AND ( "S"."ISDELETED" = :isdeleted4 )  
    
    Parameters: :A=2603188016, :B=1202, :isdeleted4=False, :Const5=2603188016, :Const6=212, :constant7=2026/3/18 17:30:41, :constant8=0, :constant9=2, :Const10=1202, :constant11=0, :constant12=0

    还是一样, 我怀疑是不是达梦驱动把这种sql语句中的常量都处理成字符串了

    0 回复
  • Mr.T Mr.T VIP0
    2026/3/18

    能否升级使用 DM.DmProvider 这个nuget包

    0 回复
  • Mr.T Mr.T VIP0
    2026/3/18

    我使用最新版的DM.Provider做了一个实验是可以从datareader或得正确的类型


    image.png

    0 回复
  • Mr.T Mr.T VIP0
    2026/3/19

    但是在sqlsugar的adoprovider断点所返回的datareader中使用GetFieldType 所返回的类型是string

    0 回复