现在我有三张表:工程表,测期表,观测日期表
表之间的关系为:工程表(1)——测期表(n),测期表(1)——观测日期表(n)
我在C# winform中使用treeview绑定,实现的思路是:先绑定工程信息,再根据工程编号绑定测期信息,再根据测期编号绑定观测日期信息。嵌套了三层循环,结果我有30个工程,每个工程有30个测期,每个测期现在只有一个观测日期。把这些数据加载上去花费的时间将近要10秒钟,感觉太长了。现要求如下:绑定时间控制越短越好,最好是1-2秒?
提供:数据库(access),分!!!静候佳音!!!
表之间的关系为:工程表(1)——测期表(n),测期表(1)——观测日期表(n)
我在C# winform中使用treeview绑定,实现的思路是:先绑定工程信息,再根据工程编号绑定测期信息,再根据测期编号绑定观测日期信息。嵌套了三层循环,结果我有30个工程,每个工程有30个测期,每个测期现在只有一个观测日期。把这些数据加载上去花费的时间将近要10秒钟,感觉太长了。现要求如下:绑定时间控制越短越好,最好是1-2秒?
提供:数据库(access),分!!!静候佳音!!!
解决方案 »
- windows任务计划和windows服务,求高手
- 打印datagridview,怎样画出和datagridview一样的方格来,希望大家能帮我把这段代码改一改哟!
- (急切求助)WinFomr环境下如何获取CheckedListBox已选择项的值。。。。
- 为什么用DevExpress的控件编译会说我没引用?
- 帮我看看这段代码错那了!
- winform下文本框获取焦点时全选问题
- 我对接口与委托的理解!!!
- 索引器可以并列?怎么理解该语法?
- Cω,微软的下一代语言,不知会不会有替代C#的趋势
- 用winform的 application/octet-stream 这种类型的如何下载
- 请教
- 在winform中应该怎么使用System.Type.GetType取出webserice的类型来?
继续请教了。
如果只要几毫秒。那你肯定在绑定的时候循环了n多次。
示例代码也行。
要winform的不要webwinform的。
ThreadPool.QueueUserWorkItem(new WaitCallback(加载测期表),x);也就是说,所有第二层节点都是分别在不同的线程中加载的。这样,系统也会立刻显示界面,而且也不需要用户点击才加载。
string str_sql1 = "select projectid,projectname from project";
//根据工程编号获取测期信息
str_sql2 = "SELECT distinct tg.Table_GaugeDate_Id,tg.Table_GuageDate_Name FROM Table_Project tp INNER JOIN Table_GaugeDate tg " + " ON tp.Table_Project_Id = tg.Table_Project_Id where tp.Table_Project_Id =" + _projectId;
//根据测期编号获取观测日期信息
str_sql = "SELECT Table_GuageDateTime.Table_GuageDateTime_Id, Table_GuageDateTime.Table_GuageDateTime FROM" + " Table_GaugeDate INNER JOIN Table_GuageDateTime ON Table_GaugeDate.Table_GaugeDate_Id = Table_GuageDateTime.Table_GaugeDate_Id" + " WHERE Table_GaugeDate.Table_GaugeDate_Id = " + guageDateId + "";sql语句是这样的!我也是觉得啊,这么点数据怎么会要这么长时间呢?
select * into temp from Table_Project where able_Project_Id = @projectId
SELECT distinct tg.Table_GaugeDate_Id,tg.Table_GuageDate_Name FROM temp tp INNER JOIN Table_GaugeDate tg ON tp.Table_Project_Id = tg.Table_Project_Id
试试
你的问题出在数据库查询上!!
str_sql2 = "SELECT distinct tg.Table_GaugeDate_Id,tg.Table_GuageDate_Name FROM Table_Project tp INNER JOIN Table_GaugeDate tg " + " ON tp.Table_Project_Id = tg.Table_Project_Id where tp.Table_Project_Id =" + _projectId; 这样拼写意味着30个工程就得重新连接30次数据库,是吧?...
你可以这样:
select * from 工程表;select * from 测期表,select * from 观测日期表
这样查询出来的一个DataSet里边就有3个表.然后你给DataSet加上关系。叫做DataRealation,相当于数据库的
外键连接。这样ds.Table["工程表"].Rows[0].GetChilds(DataRealation),得到的就是全部的对应测期表记录!再试试看看行不! 好运!
这样查询出来的一个DataSet里边就有3个表.然后你给DataSet加上关系。叫做DataRealation,相当于数据库的
外键连接。这样ds.Table["工程表"].Rows[0].GetChilds(DataRealation),得到的就是全部的对应测期表记录! 给工程表 和 测期表加上了DataRealation
那么同样的方式去给测期表 和 观测日期表 加上DataRealation
ds.Table["工程表"].Rows[0].GetChilds(DataRealation),得到的就是全部的对应测期表记录!
同样再用得到的
foreach(DataRow drEach in ds.Table["工程表"].Rows[0].GetChilds(DataRealation) )
{
drEach .GetChilds(DataRealation2) //得到的就是全部的对应观测日期表记录!
}