【发布时间】:2014-09-10 13:25:48
【问题描述】:
我的 Windows 窗体应用程序包含 OleDbDataAdapter,从远程数据库获取数据需要更长的时间。它无法检索/保存像 5000 行这样的表数据(应用程序被击中)。这是我的代码。
environments = ConfigurationManager.GetSection("Environment") as NameValueCollection;
string strConnString = environments[envs];
conn = new OleDbConnection(strConnString);
conn.Open();
OleDbDataAdapter objDa = new OleDbDataAdapter("select * from tblABC", conn);
DataSet ds1 = new DataSet();
objDa.Fill(ds1);
dataGridView1.DataSource = ds1.Tables[0];
环境部分在 app.config 文件中配置:
<configuration>
<configSections>
<section name ="Environment" type="System.Configuration.NameValueSectionHandler" />
</configSections>
<Environment>
<add key ="CIT" value ="Password=pwd123;User ID=abc123;Data Source=db1;Persist Security Info=True;Provider=MSDAORA"/>
<add key ="SIT" value ="Password=pwd234;User ID=abc234;Data Source=db2;Persist Security Info=True;Provider=MSDAORA"/>
<add key ="UAT" value ="Password=pwd345;User ID=abc345;Data Source=db3;Persist Security Info=True;Provider=MSDAORA"/>
</Environment>
</configuration>
如果有人可以用代码提出更好的方法/机制,那就太好了。
【问题讨论】:
-
究竟发生了什么?您确定您与数据库的连接正常吗?如果您执行“从 .. 中选择前 10 个 *”,它会起作用吗?
-
我已连接并能够在 DB 上执行命令。 1. 每次执行命令时,我都会看到我的应用程序重新连接到数据库。 2. 我的应用程序在检索更多记录作为结果时消耗更多时间(假设超过 1000 条记录)。需要尽量减少这个时间
-
即使我对断开连接的架构以及大量与数据相关的支持对象感到满意。但是在几次“实时”实施之后,所有的幸福都失去了。根据我的经验,我自己在使用 ADO.NET 时创建了一些规则。 1.永远不要将所有内容加载到数据集中(NO select * from table)。仅选择您需要的列。 2. 如果您知道表中的行数将超过几千行,请以分页方式加载它。 4. 始终使用存储过程,而不是内联查询。 5.使用SSMS,执行计划,优化SP内部的查询。
-
"每次我执行命令时,我都会看到我的应用程序重新连接到 DB。" - 每次使用时都应该关闭连接 - 最好使用“using”语句。
-
如果您绝对需要所有数据,您可以最初直接获取前 200 行,然后在新线程的后台静默获取其余数据。这应该让您的用户保持参与并且您的 UI 具有交互性。此外,您每次可以检索 200 行的数据块。
标签: c# .net winforms oledb oledbdataadapter