代码如下       myConnection.open()
        SqlCommand myCommand = myConnection.CreateCommand();
        SqlTransaction myTrans;
        myTrans = myConnection.BeginTransaction(IsolationLevel.ReadCommitted);
        
                
        myCommand.Connection = myConnection;
        myCommand.Transaction = myTrans;
        try
        {    
        
           myCommand.CommandType = CommandType.StoredProcedure;
           myCommand.CommandText = "A";
           myCommand.ExecuteNonQuery();
          
             myCommand.CommandType = CommandType.Text;
            myCommand.CommandText = "select str from B where number='111'";
            string temp = null;
            SqlDataReader rd = myCommand.ExecuteReader();
            if (rd.Read())
            {
                temp = rd.GetString(0).ToString();
               
               
            }
              myCommand.CommandType = CommandType.StoredProcedure;
            myCommand.CommandText = "C";            SqlParameter spam1 = new SqlParameter();
                spam1.ParameterName = "@code";
                spam1.SqlDbType = SqlDbType.VarChar;
                   spam1.Size = 25;
                spam1.Value = temp;
                spam1.Direction = ParameterDirection.Input;
                myCommand.Parameters.Add(spam1);             myCommand.ExecuteNonQuery();
               myTrans.Commit();        }
        cacth(Exception)
        {
             myTrans.Rollback();
        }
以上代买该怎么修正 谢谢!
异常提示:System.Web.Services.Protocols.SoapException: 服务器无法处理请求。 ---> System.InvalidOperationException: 已有打开的与此命令相关联的 DataReader,必须首先将它关闭。

解决方案 »

  1.   

    try{}
    catch()
    finally
    {
     关闭数据连接}
      

  2.   


     if (rd.Read())
                {
                    temp = rd.GetString(0).ToString();
                   
                   
                }
    在这个地方报错的
      

  3.   

    楼上正解.在finally中关闭数据库连接
      

  4.   

    myConnection.open()
            SqlCommand myCommand = myConnection.CreateCommand();
            SqlTransaction myTrans;
            myTrans = myConnection.BeginTransaction(IsolationLevel.ReadCommitted);
            
                    
            myCommand.Connection = myConnection;
            myCommand.Transaction = myTrans;
            try
            {    
            
               myCommand.CommandType = CommandType.StoredProcedure;
               myCommand.CommandText = "A";
               myCommand.ExecuteNonQuery();
              
                 myCommand.CommandType = CommandType.Text;
                myCommand.CommandText = "select str from B where number='111'";
                string temp = null;
                SqlDataReader rd = myCommand.ExecuteReader();
                if (rd.Read())
                {
                    temp = rd[0].ToString();//如果为null不会报错
                   
                   temp = rd.GetString(0);//如果为null会报错
                }
                  myCommand.CommandType = CommandType.StoredProcedure;
                myCommand.CommandText = "C";            SqlParameter spam1 = new SqlParameter();
                    spam1.ParameterName = "@code";
                    spam1.SqlDbType = SqlDbType.VarChar;
                       spam1.Size = 25;
                    spam1.Value = temp;
                    spam1.Direction = ParameterDirection.Input;
                    myCommand.Parameters.Add(spam1);             myCommand.ExecuteNonQuery();
                   myTrans.Commit();        }
            cacth(Exception)
            {
                 myTrans.Rollback();
            }finally
    {
       //关闭数据库
    }