【问题标题】:i want to use data reader & update statement at same time我想同时使用数据阅读器和更新语句
【发布时间】:2012-01-21 02:39:47
【问题描述】:

这里是代码

    String[] month=new String[12]{"January","February","March","April","May","June","July","August","September","Octomber","November","December"};
    int day = DateTime.Now.Day;
    int mon= DateTime.Now.Month;
    mon = mon - 1;      //because month array is with 0
    Label1.Text = day.ToString();
    if (day==21)
    {
        int j = 1;
        SqlCommand cmd1 = new SqlCommand();
        cmd1.Connection = MyConn;
        cmd1.CommandText = "SELECT No_of_times,Dustbin_no from mounthly_data";
        SqlDataReader MyReader = cmd1.ExecuteReader();
        while (MyReader.Read())
        {
            String a = MyReader["No_of_times"].ToString();
            String b = MyReader["Dustbin_no"].ToString();

            SqlCommand cmd = new SqlCommand();
            cmd.Connection = MyConn;
            cmd.CommandText = "update Yearly_data set [" + month[mon] + "]='"+a+"' where Dustbin_no='"+b+"'";   //just see ["+month[mon+"] it's imp
            i = cmd.ExecuteNonQuery();    
        }
        MyReader.Close();
    }

我得到了错误

已经有一个打开的 DataReader 与此命令关联,必须先关闭。

【问题讨论】:

    标签: asp.net sql ado.net


    【解决方案1】:

    我认为您应该将代码块上方的其余代码提供给我们,因为我不确定 ExecuteNonQuery 是如何用完数据读取器的。但据我所知,您可能想要的是打开两个单独的连接。每个连接一次只能打开一个数据读取器。您可以使用两个单独的连接,也可以使用数据表/数据集作为两个查询的结果。

    编辑:从您的其余代码来看,是的,使用两个连接将是最简单的答案。当阅读器打开时,与其关联的连接专用于所使用的命令,因此没有其他命令可以使用该连接。

    【讨论】:

      【解决方案2】:

      我建议使用 DataTable,因为这个 OLEDB 示例显示:

      public static void TrySomethingLikeThis()
      {
        try
        {
          using (OleDbConnection con = new OleDbConnection())
          {
            con.ConnectionString = Users.GetConnectionString();
            con.Open();
            OleDbCommand cmd = new OleDbCommand();
            cmd.Connection = con;
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = "SELECT * FROM Customers";
            OleDbDataAdapter da = new OleDbDataAdapter(cmd);
            DataTable dt = new DataTable();
            da.Fill(dt);
            foreach (DataRow row in dt.AsEnumerable())
            {
              cmd.CommandText = "UPDATE Customers SET CustomerName='Ronnie' WHERE ID = 4";
              cmd.ExecuteNonQuery();
            }
          }
        }
        catch (Exception ex)
        {
          throw new Exception(ex.Message);
        }
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多