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

图2是查询时间长的截图

---------------------------------------------------------------------------------------------分 割--------------------------------------
上传一段我查询的关键代码:
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%报错。希望那位大神帮忙看看,有没有什么其他原因被我忽略了。