sz_xd 发表于 2020-11-26 00:19:30

活字格 6.102版对内表查询记录时(DataAccess.GetTableData),当没找到记录会提示出错

本帖最后由 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
    {
      
      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
}



Simon.hu 发表于 2020-11-26 10:25:02

本帖最后由 Simon.hu 于 2020-11-26 10:27 编辑

给您同步一下进度:问题已经在我们这边重现;我们已经开始调查问题了

sz_xd 发表于 2020-11-27 00:53:25

Simon.hu 发表于 2020-11-26 10:25
给您同步一下进度:问题已经在我们这边重现;我们已经开始调查问题了

感谢胡总及活字格团队的重视,谢谢!

Simon.hu 发表于 2020-11-27 09:11:51

大佬,问题调查了一下,
主要是跟我们支持Linux,切换成.netcore平台有关
我们看了一下,从产品代码方面确实不好弄,我们会在继续研究一下看看能不能修改,但是短时间看希望比较渺茫

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

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);
            }




Simon.hu 发表于 2020-11-27 17:13:46

谢谢,大佬的支持的
:hjyzw:
页: [1]
查看完整版本: 活字格 6.102版对内表查询记录时(DataAccess.GetTableData),当没找到记录会提示出错