【问题标题】:ASP.NET, Right way to use DataReaderASP.NET,使用 DataReader 的正确方法
【发布时间】:2012-04-11 16:06:55
【问题描述】:

我想知道使用 DataReader 的正确方法。 (C# 和 Advantage 数据库)

假设我的数据库中有 Order、Item 和 Customer 表。

我需要从一个cs文件中的每个表中读取数据。

所以我打开了数据库连接并使用 DataReader 读取数据。

喜欢,

AdsConnection conn = new AdsConnection("~~~~");
AdsCommand cmd;
AdsDataReader reader;

conn.open();
cmd = conn.CreateCommand();
cmd.CommandText = "Select * from order";
reader = cmd.ExecuteReader();

现在我需要阅读另一张桌子。但我认为我需要关闭连接和阅读器并重新连接并重新定义它们。

所以,我定义了另一个阅读器。

conn.Close();
conn.Open();
AdsDataReader itemReader;
cmd.CommandText = " Select * from item";
itemReader = cmd.ExecuteReader();

.
.
reader.close();
itemReader.close();
conn.Close();

没事吧?像这样使用? 有谁知道更好的方法,请指教~

谢谢!

【问题讨论】:

    标签: c# asp.net sqldatareader datareader advantage-database-server


    【解决方案1】:

    ADO.NET 2.0 引入了一个称为 MARS 的功能 - 多活动结果集。这允许您向数据库提交多个查询并通过一次调用来检索它们。

    这是 MSDN 文章,其中包含使用 MARS 的代码示例:

    http://msdn.microsoft.com/en-us/library/yf1a7f4f(v=vs.80).aspx

    请注意,连接字符串将 MultipleActiveResultSets 属性设置为 true。

    【讨论】:

    • 感谢您的回答,但 Advantage Database Connection 不支持 MultipleActiveResultSets。 :(
    【解决方案2】:

    (因为更合适的答案被删除了)

    您可以保持连接打开,但作为一种良好做法,您应该尽快关闭命令和阅读器。

    最好的方法是将这些资源中的每一个都放在using() { } 语句中。

    如果将每个查询放在单独的方法中是可能或有益的,则为每个连接使用单独的连接。只要您的数据库支持连接池,就不会损失性能。

    还有一点:

    • 不要使用SELECT *,把列拼出来

    【讨论】:

    • 啊哈!因此,如果将资源放入 using() 中,那么我根本不必关闭它们吗? ^^ tyty!
    • 没错,它是异常安全的,并且 vars 非常适合块等。
    【解决方案3】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-10
      • 1970-01-01
      • 2010-10-18
      • 1970-01-01
      • 1970-01-01
      • 2010-10-30
      • 1970-01-01
      相关资源
      最近更新 更多