mydb.CodeFirst.GetDifferenceTables(type)报错信息无法捕获 返回

SqlSugar 沟通中
18 803

image.png

image.png

不加try调试可以看到连续报两个错,需要捕获第一个报错信息才能知道为什么错误。

实际情况是只能捕获到:“无法对 表 'TempDiff250916110416922' 执行 删除,因为它不存在,或者您没有所需的权限。”,这种没有意义的报错信息

image.png


热忱回答18

  • 升级最新看看

    0 回复
  • image.png

    这个提示比较明显了吧,建表出错了。。text不能加length

    0 回复
  • 提供一下报错实体。

    0 回复
  • @fate sta:问题就是只有调试才能看到这个错误,现在业务是给前端去加字段的,使用上无法知道具体错误信息


    0 回复
  • @fate sta:实体是动态的

    0 回复
  • @˙Ⱉ˙ฅ:不管你是怎么动态的。。你要把动态的值硬编码出来,我才能看到哪有问题。

     比如读的数据库类型中有text不能加Length要清空掉

    0 回复
  • DemoTableDifferenceProvider.7z

    这是demo,使用的版本是5.1.4.107,用了最新版连有效的错误信息都没有抛出来

    0 回复
  • static void Main(string[] args)
    {
        using (var mydb = new SqlSugarClient(new ConnectionConfig
        {
            ConnectionString = ".",
            DbType = SqlSugar.DbType.SqlServer,
            IsAutoCloseConnection = true,
            MoreSettings = new ConnMoreSettings()
            {
                IsWithNoLockQuery = true
            }
        }))
        {
            var objtab = mydb.DynamicBuilder().CreateClass("Demo1", new SugarTable()
            {
                TableName = "Demo1",
                IsDisabledDelete = false,
                IsDisabledUpdateAll = false,
            });
            objtab = objtab.CreateProperty("Col1"
                  , typeof(int)
                  , new SugarColumn()
                  {
                      ColumnName = "Col1",
                      IsPrimaryKey = true,
                      IsIdentity = true,
                      IsNullable = false,
                      ColumnDataType = "int",
                      Length = 0,
                      DecimalDigits = 0,
                      DefaultValue = null,
                      ColumnDescription = ""
                  });
            objtab = objtab.CreateProperty("Col2"
                 , typeof(string)
                 , new SugarColumn()
                 {
                     ColumnName = "Col2",
                     IsPrimaryKey = false,
                     IsIdentity = false,
                     IsNullable = false,
                     ColumnDataType = "ntext",
                     Length = 1000,
                     DecimalDigits = 0,
                     DefaultValue = null,
                     ColumnDescription = ""
                 });
            var type = objtab.BuilderType();
            //1.直接调试这部可以获取到报错信息:SqlSugar.SqlSugarException:“第 2 个列、参数或变量: 不能对数据类型 ntext 指定列宽。”
            //注释这行,try捕获x2
            TableDifferenceProvider x1 = mydb.CodeFirst.GetDifferenceTables(type);
            try
            {
                TableDifferenceProvider x2 = mydb.CodeFirst.GetDifferenceTables(type);
            }
            catch (Exception ex)
            {
                //拿不到有效的报错信息
                Console.WriteLine("错误实体配置:" + ex.Message);
            }
            Console.WriteLine("创建实体成功!");
        }
    }


    0 回复

  • @fate sta:大佬求助

    0 回复
  • fate sta fate sta VIP0
    2025/9/12

    image.png

    ntext把length设置为0

    0 回复
  • @fate sta:我知道,我是为了复现错误,现在发现的问题是当配置错误的时候无法捕获到有效的错误信息

    0 回复
  • fate sta fate sta VIP0
    2025/9/26

    @˙Ⱉ˙ฅ:升级高版本看看,应该优化过错误信息了

    0 回复
  • @fate sta:升级最新版还是无法拿到准确的错误信息image.png

    0 回复
  • @fate sta:现在的需求是希望能用Console.WriteLine方法打印出【SqlSugar.SqlSugarException:“第 2 个列、参数或变量: 不能对数据类型 ntext 指定列宽。】这个错误信息

    0 回复
  • @fate sta

    finally

    {

    sqlSugarProvider.DbMaintenance.DropTable(text);

    }应该加一个判断,临时表是否生成了,没生成的不应该执行DropTable(text);

    image.png

    0 回复
  • fate sta fate sta VIP0
    2025/9/29

    SqlSugarCore 5.1.4.206-preview03


    过五分钟后安装,已优化

    0 回复
  • fate sta fate sta VIP0
    2025/9/29

    勾预览

    0 回复
  • @fate sta万分感谢,不过我项目是.Net Framework

    0 回复