QQ登录

只需一步,快速开始

要求要能方便的设置顺序报表的开始时间,结束是时间和时间间隔以及报表的变量

[ 复制链接 ]
最近客户对报表的要求有改变,客户要求要能方便的设置顺序报表的开始时间,结束是时间和时间间隔以及报表的变量。思来想去只有WinCCOLEDBProvider能方便的完成在这个要求。所以我就用C#写了一个小程序,通过WinCCOLEDBProvider接口来调用wincc归档数据,然后再利用得到的数据做出一个报表,最后用户可以选择将报表导出为excel文件。
    现在问题是,我查询的时间如果短的话是没有问题的的,数据可以正常的查询出来.但是一旦查询的时间比较长就会报错。错误信息为:DB_E_ERRORSINCOMMAND(0x80040E14)
    一开始我觉得是我的程序有问题,我不断的检查我的程序,我没有发现有错误。后来我打开sql 的report service,利用report service来查询,发现问题是一样的。查询的时间短没有问题,查询的时间一长就报错。
图1和图2都是用SQL report service 来查询的.
图1是查询时间比较短的截图.

图2是查询时间长的截图

图2是查询时间长的截图

图2是查询时间长的截图
Untitled.jpg
上传一段我查询的关键代码:
     string myConnectstr = "Provider=WinCCOLEDBProvider.1;" + "Catalog="+ Database + ";" + "Data Source="+ serverName+ "\\WinCC";
            string mySelectQuery = "TAG:R," + "(303;304;305)" + ",'" + starttime + "','" + endtime + "','order by Timestamp ASC','"+ "TimeStep=" + step + ",1'";
            //mySelectQuery = "Tag:R,305,'2016-08-30 08:20:27','2016-08-31 08:20:27','order by Timestamp ASC','TimeStep=3600,1'";
            try
            {
                using (OleDbCommand myCommand = new OleDbCommand(mySelectQuery))
                {
                    OleDbConnection  myConnection = new OleDbConnection(myConnectstr);
                    myCommand.Connection = myConnection;
                    OleDbDataAdapter myAdapter = new OleDbDataAdapter(myCommand);
                    DataTable myTableTags = new DataTable();
                    myTableTags.TableName = "myTableTags";
                    myAdapter.Fill(myTableTags);
                    dgv.DataSource = myTableTags;
                    myConnection.Close();
                    MessageBox.Show(myTableTags.Rows.Count.ToString());
                }
            }
            catch(Exception ex)
            {
                //myConnection.Close();
                MessageBox.Show(ex.Message);
            }
现在问题卡住,不知道到底是wincc的connectivity package问题还是MS SQL的问题,我觉得可能是wincc的分段导致的,因为我发现一般在分段时间(项目现在设置的分段时间是一周)查询问题不大,一旦超过一周那么100%报错。希望那位大神帮忙看看,有没有什么其他原因被我忽略了。
----------没有人提供点信息吗?
被客户逼的没办法了,暂时 我先把查询分段了。每三天分一段。一个一星期的查询分三次进行,第一次查3天,第二次查3天,第三次查1天。经过我测试这样查询是可以查询出来。但是一个明显的缺点就是查询时间变长了。因为查询的次数增加了。如果客户一次查询一个月的数据,那效率..........
软件版本:wincc 7.2 update7
我尝试用wincc 7.3测试也是同样的问题。
在2014年的时候我记得当初用wincc 7.0 SP3的时候是没有这个问题的。
操作系统:win7 32位和64位都测试过了,都是同样的结果。
难道这个是一个很冷的东西?没有什么人用?我现在甚至都怀疑西门子有没有对connectivity package做过严格的测试了。connectivity package的文档中的例子说明什么的都标明“西门子不对此提供技术支持”。我真是晕......
实在没办法只能暂时这么用着,再实在不行我就自己创建一个数据库,用c#写个程序,读取wincc的变量,定时往数据库写数据,然后再做一个程序从数据库查询了 。wincc 7.2 /7.3的connectivity package提供的oledb接口这的让人伤心了。



回复

使用道具 举报

快速回复 返回列表 客服中心 搜索