Saltar al contenido

Devolver un SqlDataReader

Si encuentras algo que te causa duda nos puedes dejar un comentario y trataremos de ayudarte lo mas rápido que podamos.

Solución:

El problema es que dejar la función (a través de la declaración de retorno) lo saca de la using bloques, y así el SqlDataReader y SqlConnections que está utilizando se desechan. Para solucionar el problema, intente cambiar la firma de la función de esta manera:

public static IEnumerable GetGeneralInformation ( int RecID )

y luego actualice el medio de la función de esta manera:

using ( var reader = cmd.ExecuteReader() )

    while ( reader.Read() )
    
        yield return reader;
    

Para el final “¿Cómo lo leo?” parte, podría verse así:

int RecID = 12345;
string result = GetGeneralInformation(RecID).First()["Status"].ToString();

Agrega tu conexión string a la sección AppSettings en app.config o web.config.

   public string GetSqlConnection()
    
        return  System.Configuration.ConfigurationManager.AppSettings["SqlConnectionString"];
    

//Función para devolver los resultados de SqlDataReader

    public SqlDataReader executeReader(string sql, SqlParameter[] parameters=null)
    
        SqlConnection conn = new SqlConnection();
        conn.ConnectionString = GetSqlConnection();
        conn.Open();
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = conn;
        cmd.CommandText = sql;
        if (parameters != null)
        
            cmd.CommandType = CommandType.StoredProcedure;
            foreach (SqlParameter p in parameters)
            
                cmd.Parameters.Add(p);
            
        
        else
        
            cmd.CommandType = CommandType.Text;
        
        SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
        return reader;
    

Para usar la función:

        string query = @"SELECT cs.Status, cs.Completed
      FROM NC_Steps s
      INNER JOIN NC_ClientSteps cs
          ON cs.RecID = s.RecID
      WHERE cs.ClientID = 162
      AND s.RecID = @value";
       //you can add more parameters by adding commas
       var parameters = new SqlParameter[] 
            new SqlParameter("@value", RecID )
           ;

        SqlDataReader dr = executeReader(query, parameters);
        while (dr.Read())
        
            //fill your controls with data 
        
        dr.Close();

valoraciones y reseñas

Nos puedes añadir valor a nuestro contenido colaborando tu experiencia en las explicaciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *