public string cnStr = @"Data Source=192.168.3.229;Initial Catalog=mmcjwc2010;User ID=jwxt;Password=jwxt";
        private void Email_Load(object sender, EventArgs e)
        {                        SqlConnection cn = new SqlConnection(cnStr);
            cn.Open();
            string sqlStr = "Op_Email_XueShengEmail";
            SqlCommand cmd = new SqlCommand(sqlStr, cn);
            cmd.CommandType = CommandType.StoredProcedure;
       [color阅读器关闭时尝试调用 Read 无效。=#FF0000]     cmd.CommandTimeout = 2000;[/color] //请问这个是什么意思??
            SqlDataReader dr = cmd.ExecuteReader();
            while (dr.Read())
            {
                string Email = dr["email"].ToString();
                SqlConnection cn1 = new SqlConnection(cnStr);
          
                using ( var cmd1 = cn1.CreateCommand())
                {
                    cn1.Open();
                    cmd1.CommandText = "[dbo].[Op_Email_ChengJiFaSong]";
                    cmd1.CommandType = System.Data.CommandType.StoredProcedure;
                    cmd1.Parameters.Add("@Email", System.Data.SqlDbType.Char, 50);
                    cmd1.Parameters["@Email"].Value = dr["email"].ToString();
                    using (System.Data.IDataReader reader = cmd1.ExecuteReader())
                    {
                        while (reader.Read())   //报错阅读器关闭时尝试调用 Read 无效。                     {                            DataTable dt = new DataTable("Table1");
                            dt.Load(reader);
                            DataSet ds = new DataSet();
                            ds.Tables.Add(dt);
                            int i;
                            int dcCount=ds.Tables[0].Rows .Count ;
                            for (i = 0; i < dcCount; i++)
                            { 
                            string k =ds.Tables[0].Rows[i][0].ToString ();
                            }      
                        }          
                    }       
                }            }
            dr.Close();
            cn.Close();
如上面   cmd.CommandTimeout = 2000这个是什么意思??还有while (reader.Read())这里问什么会报这个错的??应该怎么样解决。。
谢谢了

解决方案 »

  1.   

    调用sqldataread 是不能直接在方法后面关闭它public static SqlDataReader ExecuteReader(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms)
            {
                SqlCommand cmd = new SqlCommand();
                DataReader reader = null;
                try
                {
                    PrepareCommand(cmd, connection, null, cmdType, cmdText, cmdParms);
                    reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                    cmd.Parameters.Clear();
                    return reader;
                }
                catch (Exception e)  {   throw e;  }
                finally
                { if (reader != null) {  reader.Close();  }  }
            }
    ConnectionTimeout 属性
    指示在终止尝试和产生错误前建立连接期间所等待的时间
      

  2.   

    调用sqldataread 是不能直接在方法后面关闭它public static SqlDataReader ExecuteReader(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] cmdParms)
      {
      SqlCommand cmd = new SqlCommand();
      DataReader reader = null;
      try
      {
      PrepareCommand(cmd, connection, null, cmdType, cmdText, cmdParms);
      reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
      cmd.Parameters.Clear();
      return reader;
      }
      catch (Exception e) { throw e; }
      finally
      { if (reader != null) { reader.Close(); } }
      }
    ConnectionTimeout 属性
    指示在终止尝试和产生错误前建立连接期间所等待的时间