找回密码
 立即注册

QQ登录

只需一步,快速开始

sz_xd
金牌服务用户   /  发表于:2020-11-26 00:19  /   查看:3614  /  回复:5
本帖最后由 sz_xd 于 2020-11-26 00:24 编辑


发现 活字格 6.102版在对内表查询记录时,当发现没找到记录时,会提示出错,程序中止,这不应该产生这错误,以前当没找到时,是返回data.Count=0 的值,具体引用文件参考,及 出错提示的内容,我摘录以下:

GetTableData 方法 - 活字格6.0帮助手册 - 葡萄城产品文档中心 (grapecity.com.cn)
https://help.grapecity.com.cn/pa ... ion?pageId=46172495

public class SampleApi : ForguncyApi
    {
        [Post]
        public void GetTableData()
        {
            //要获取的行的字段名及值
            ColumnValuePair valuepair = new ColumnValuePair();
            valuepair.ColumnName = "ID";
            valuepair.Value = 1;   

            //使用GetTableData获取员工表中满足条件的行的记录
            Dictionary<string, object> data = this.DataAccess.GetTableData("员工表", valuepair);  //发现Bug 是没找到存在的ID号,会提示出错中止执行,正常没找到时,这是
        
            if (data.Count != 0)
            {
                //使用AddTableData发法将获取的记录添加到数据表中
                //this.DataAccess.AddTableData("员工表", data);
            }


        }
    }




****************如果发现没找到存在内表的记录时,就会提示出以下错误,程序中止,这不应该的,以前这是就返回 data.Count=0 值。


Request Exception Happened-------------------------------
Path/customapi/myapi/testpostapi_pcregistred
{
  "ClassName": "System.InvalidOperationException",
  "Message": "没有任何记录存在。",
  "Data": null,
  "InnerException": null,
  "HelpURL": null,
  "StackTraceString": "   at Forguncy.KatanaMiddleware.CustomApiDataAccess.GetTableData(String tableName, ColumnValuePair primaryKey)
   at MyAPI.MyAPI.Hua_QueryBT_ToSring(String hua_queryB, String findcolumnName, String hua_Value, String hua_returncolumn)
   at MyAPI.MyAPI.TestPostAPI_PcRegistred()
   at Forguncy.KatanaMiddleware.CustomApiMiddleware.a(HttpContext A_0)
   at Forguncy.KatanaMiddleware.CustomApiMiddleware.InvokeAsync(HttpContext context)
   at Forguncy.KatanaMiddleware.ConcurrentControllMiddleware.InvokeAsync(HttpContext context)
   at Forguncy.Server2.KatanaMiddleware.StartPageMiddleware.InvokeAsync(HttpContext context)
   at Forguncy.Server2.KatanaMiddleware.HttpHeaderMiddleware.InvokeAsync(HttpContext context)
   at Forguncy.KatanaMiddleware.ExceptionTraceMiddleware.InvokeAsync(HttpContext context)",
  "RemoteStackTraceString": null,
  "RemoteStackIndex": 0,
  "ExceptionMethod": null,
  "HResult": -2146233079,
  "Source": "Forguncy.Server2",
  "WatsonBuckets": null
}



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

5 个回复

正序浏览
Simon.hu讲师达人认证 悬赏达人认证 活字格认证
超级版主   /  发表于:2020-11-27 17:13:46
7#
谢谢,大佬的支持的
回复 使用道具 举报
sz_xd
金牌服务用户   /  发表于:2020-11-27 16:51:42
地板
本帖最后由 sz_xd 于 2020-11-27 16:55 编辑
Simon.hu 发表于 2020-11-27 09:11
大佬,问题调查了一下,
主要是跟我们支持Linux,切换成.netcore平台有关
我们看了一下,从产品代码方面 ...

感谢胡总指教,按你这方法暂用是可行的, try 预测在查询中可能出现的异常。捕获异常并对异常进行处理,就在catch中实现未找到的处理,这是可以过渡处理的,谢谢!
现胡总指教改用  try 捕获异常 ,是可以的:
            //使用GetTableData获取员工表中满足条件的行的记录
            Dictionary<string, object> data = new Dictionary<string, object>();
            try
            {
                data = this.DataAccess.GetTableData("员工表", valuepair);
            }
            catch
            {
                // 异常情况,可以自行添加日志记录等逻辑
            }



我昨天晚上还暂改用为: 引用 Odata公式,将动态调用文符串进行拼接过渡,例如:
            //使用GetTableData方法,获取通过OData查询字符串查询出的数据表中的记录
            var data = DataAccess.GetTableData(string.Format("员工表?$select=姓名,部门,出生日期&$filter=ID eq 1")) as List<Dictionary<string, object>>;
            if (data.Count != 0)
            {
                //使用AddTableData方法将查询出的记录添加到数据表中
                this.DataAccess.AddTableData("员工表", data[0]);
            }




回复 使用道具 举报
Simon.hu讲师达人认证 悬赏达人认证 活字格认证
超级版主   /  发表于:2020-11-27 09:11:51
板凳
大佬,问题调查了一下,
主要是跟我们支持Linux,切换成.netcore平台有关
我们看了一下,从产品代码方面确实不好弄,我们会在继续研究一下看看能不能修改,但是短时间看希望比较渺茫

不过,咱在实际使用的时候,这样写代码就能差不多万无一失了(帮助手册已经修改

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
sz_xd
金牌服务用户   /  发表于:2020-11-27 00:53:25
沙发
Simon.hu 发表于 2020-11-26 10:25
给您同步一下进度:问题已经在我们这边重现;我们已经开始调查问题了

感谢胡总及活字格团队的重视,谢谢!
回复 使用道具 举报
Simon.hu讲师达人认证 悬赏达人认证 活字格认证
超级版主   /  发表于:2020-11-26 10:25:02
楼主
本帖最后由 Simon.hu 于 2020-11-26 10:27 编辑

给您同步一下进度:问题已经在我们这边重现;我们已经开始调查问题了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部