none
Guardar ids de uma consulta SQL em uma variavel RRS feed

  • Pergunta

  • Pessoal estou com duvida.

    Gostaria de guardar um conjunto de ids de um select em uma variavel, e recuperalo em outro metodo , contatenando meu idvariavel no where desse sql. 

    Veja o que posso estar fazendo de errado.

    public partial class DataReader : System.Web.UI.Page
        {
            public string strConexao = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
            public string sqlvar;
            protected void Page_Load(object sender, EventArgs e)
            {
                SqlConnection cnn = new SqlConnection(strConexao);
                SqlCommand cmd = new SqlCommand("select * from uni_tb_itens where id_projeto = 2 and id_canal = 3 ORDER BY id_item", cnn);
                cnn.Open();
                SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                if (dr.HasRows)
                {
                    while (dr.Read())
                    {
                        sqlvar = dr["id_item"].ToString();
    
                        //Response.Write("Nome: " +
                        //dr.GetInt32(0) + ", ");
                        Response.Write(sqlvar);
                    }
                }
                else
                {
                        Console.WriteLine("Registro não encontrado.");
                }
    
                metodo();
            }
    
            private void metodo()
            {
                SqlConnection cnn = new SqlConnection(strConexao);
                SqlCommand cmd = new SqlCommand("Select * from uni_tb_subitens where id_item = @id_item order by id_subitem", cnn);
                cmd.Parameters.AddWithValue("@id_item", SqlDbType.Int).Value = sqlvar;
                cnn.Open();
                SqlDataReader dr = cmd.ExecuteReader();
               // if (dr.HasRows)
              //  {
             
                id.DataSource = dr;
                id.DataBind();
             //   }
               
            }
        
        
            
        
        }

    sexta-feira, 17 de agosto de 2012 15:35

Respostas

  • Ola Rodrigo,

       Não lembro de nenhuma forma facil ou pronta para isso... existem alguns truques como esse por exemplo: http://stackoverflow.com/questions/337704/parameterizing-an-sql-in-clause

       Mas acho que uma forma mais adequada de fazer isso seria essa:

    public void IniciarConsulta() {
                var result = new List<Int32>();
    
                SqlConnection cnn = new SqlConnection("");
                SqlCommand cmd = new SqlCommand("select id_item from uni_tb_itens where id_projeto = 2 and id_canal = 3 ORDER BY id_item", cnn);
                
                cnn.Open();
                SqlDataReader dr = cmd.ExecuteReader();
                if (dr.HasRows) {
                    while (dr.Read()) {
                        if (dr["id_item"] == null) continue;
                        result.Add((Int32)dr["id_item"]);
                    }
    
                    dr.Close();
    
                    metodo(cnn, result.ToArray());
                } else {
                    Console.WriteLine("Registro não encontrado.");
                }
            }
    
            private void metodo(SqlConnection cnn, int[] itens) {
                var sqlParams = new List<SqlParameter>();
                var query = new StringBuilder();
                for (int i = 0; i < itens.Length; i++) {
                    if (query.Length > 0) query.Append(" OR ");
                    
                    var paramName = String.Format("@id_item{0}", i);
                    query.AppendFormat("id_item = {0}", paramName);
                    sqlParams.Add(new SqlParameter(paramName, itens[i]));
                }
    
                var script = String.Format("Select * from uni_tb_subitens where {0} order by id_subitem", query.ToString());
                var cmd = new SqlCommand(script, cnn);
                cmd.Parameters.AddRange(sqlParams.ToArray());
                var reader = cmd.ExecuteReader();
                // Carga de dados...
            }

    sexta-feira, 17 de agosto de 2012 16:26
    Moderador