在 C# 中调用多个"SQL DataReader"s 的正确方法是什么?

标签: sql Linq C#
发布时间: 2017/2/28 22:50:10
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我调用 ExecuteReader(); 来获取数据,然后我需要与另一个查询的另一个数据。我的结构的总是像这样︰

class SomeClass
{
    public static void Main(String[] args)
    {
        SqlConnection sqlConn = new SqlConnection();
        sqlConn.ConnectionString = "some connection string" 

        SqlCommand SQLCmd = new SqlCommand();
        SQLCmd.CommandText = "some query";
        SQLCmd.Connection = sqlConn;
        sqlConn.Open();

        sqlReader = SQLCmd.ExecuteReader();

        while (sqlReader.Read())
        {
            //some stuff here
        }

        sqlReader.Dispose();
        sqlReader.Close();
        sqlConn.Close();

        SQLCmd.CommandText = "another query";
        sqlConn.Open();
        sqlReader = SQLCmd.ExecuteReader();

        while (sqlReader.Read())
        {
            //some other stuff here
        }

        sqlReader.Dispose();
        sqlReader.Close();
        sqlConn.Close();
    }
}

它们共享相同的连接字符串。他们还有什么可以分享的?他们可以共享相同 sqlConn.Open(); 吗?资源分配和避免错误的正确方法是什么?

顺便说一句是因为它是。在此先感谢。

解决方法 1:

正如提到的在我的评论 — — 如果可能的话,将这两个查询合并成一个,然后 (如果它仍将生成多个结果集),使用 NextResult 继续前进。

偷窃亚当的结构,但与更改︰

class SomeClass
{
 public static void Main(String[] args)
 {
  using (SqlConnection sqlConn = new SqlConnection("some connection string"))
  {
   sqlConn.Open();

   using (SqlCommand comm = new SqlCommand("some query; some other query;", conn))
   using (var sqlReader = comm.ExecuteReader())
   {
    while (sqlReader.Read())
    {
     //some stuff here
    }
    if(sqlReader.NextResult())
    {
      while (sqlReader.Read())
      {
       //some other stuff here
      }
     }
    }
  }
 }
}
官方微信
官方QQ群
31647020