Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

SqlDataReader retorna colunas vazias

Bom dia a todos(as), estou tendo um problema para recuperar dados com uma consulta,

public static SqlDataReader getDataReader(string p_Query, List<string> Parametros, List<Object> Filtros)
        {
            //Esse método retorna um SqlDataReader aberto com substituição de parametros da query substituidos pela lista de parametros com a lista de filtros
            //ATENÇÃO! A lista de parametros deve ter o mesmo numero de filtros, senão, o metodo retorna null
            //Caso a lista de parametros e a lista de filtros estejam vazios retornará um SqlDataReader vazio
            string SQL = p_Query;
            SqlConnection con = new SqlConnection(Conexao.obterConexao());

            if (Parametros.Count == Filtros.Count)
            {
                SqlCommand cmd = new SqlCommand(p_Query, con);
                int v_indice = 0;
                cmd.Parameters.Clear();
                foreach (string Parametro in Parametros)
                {
                    char[] v_Separadores = { ' ' };
                    cmd.Parameters.AddWithValue(Parametro, Filtros[v_indice]);
                    v_indice++;
                }
                con.Open();

                if (cmd != null)
                {
                    try
                    {
                        SqlDataReader da = cmd.ExecuteReader();
                        return da;
                    }
                    catch(Exception ex)
                    {
                        MessageBox.Show(ex.ToString());
                        return null;
                    }

                }
                else
                {
                    con.Open();
                    SqlCommand cmd4 = new SqlCommand(String.Empty, con);
                    SqlDataReader da1 = cmd4.ExecuteReader();
                    return da1;
                }
            }
            return null;
        }

A String p_Query está sendo passada corretamente, assim como as listas de parâmetros e filtros, contudo o da retorna as colunas vazias. executando a mesma query subistituindo a data no T-SQL retorna os dados corretamente. Se eu executar outra query com seus parametros e filtros retorna os dados corretamente.

1 resposta
solução!

Beleza, Kaique? Fica difícil saber com essas informações, possivelmente, o problema esteja com "conversões de tipos", esses filtros utilizam datas, por exemplo? O problema pode estar ai, caso tenha data, tente usar cmd.Parameters.Add("@nomeDoParametro", System.Data.SqlDbType.DateTime).Value = valor; ou colocar o convert no p_Query.

Você já utilizou Dictionary? com ele você pode "amarrar" melhor "índice" com o valor dele. Exemplo:

Dictionary<string, object> parametros = new Dictionary<string, object>();
    parametros.Add("Id", 10);
    parametros.Add("Nome", "Carlos");
    parametros.Add("Atualizacao", DateTime.Now);

para capturar os dados:

foreach (KeyValuePair<string,object> parametro in parametros)
        {
            cmd.Parameters.AddWithValue(parametro.Key, parametro.Value);
        }

Deixei o exemplo apenas para conhecimento, caso não tenha, se já conhece e é opção sua utilizar desta forma, por gentileza, desconsidere.

Caso o problema persista, por gentileza, envie mais código para que possamos resolver, se for o caso de estudos e qser colocar no git, envie o link aqui.

Abraço.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software