Meu código não entra no laço

.NET

07/05/2012

Fiz o código abaixo para preencher uma grid. Existe registros na tabela e o sql do código está correto, pois já conferi. Acontece que na linha if(dr.HasRows).... Ele pula para o catch.Se existe dados na tabela, ele deveria entrar no while, certo? Porque está pulando? Abaixo o código de meu método.
public DataSet PreencheTabela(int codUsuario)
{
string Erro = ;

DataTable dt = dsVerDados.Tables.Add(dtVerDados1);

DataColumn col1 = dt.Columns.Add(Data Inicio, Type.GetType(System.String));
col1.Caption = Data Inicio;

DataColumn col2 = dt.Columns.Add(Hora Inicio, Type.GetType(System.String));
col2.Caption = Hora Inicio;
col2.AllowDBNull = true;

DataColumn col3 = dt.Columns.Add(Hora Término, Type.GetType(System.String));
col3.Caption = Hora Término;
col3.AllowDBNull = true;

DataColumn col4 = dt.Columns.Add(Duração, Type.GetType(System.String));
col4.Caption = Duração;
col4.AllowDBNull = true;

DataColumn col5 = dt.Columns.Add(Ocorrência, Type.GetType(System.String));
col5.Caption = Ocorrência;
col5.AllowDBNull = true;

DataColumn col6 = dt.Columns.Add(Diagnóstico, Type.GetType(System.String));
col6.Caption = Diagnóstico;
col6.AllowDBNull = true;

DataColumn col7 = dt.Columns.Add(Responsável, Type.GetType(System.String));
col7.Caption = Responsável;
col7.AllowDBNull = true;

StringBuilder sb = new StringBuilder();

sb.AppendLine(SELECT DATA_INICIO );
sb.AppendLine(,HORA_INICIO );
sb.AppendLine(,HORA_FIM );
sb.AppendLine(,DURACAO );
sb.AppendLine(,OCORRENCIA );
sb.AppendLine(,DIAGNOSTICO);
sb.AppendLine(, RESPONSAVEL);
sb.AppendLine( FROM );
sb.AppendLine(PTL_OCORRENCIAS);

OracleConnection oracleConexao = new OracleConnection();
oracleConexao.ConnectionString = ConfigurationManager.ConnectionStrings[oracleConexao].ConnectionString;
this.comando = new OracleCommand(sb.ToString(), oracleConexao);

try
{
oracleConexao.Open();
comando.ExecuteNonQuery();

OracleDataReader dr = comando.ExecuteReader();

if (dr.HasRows)
{
while (dr.Read())
{
DateTime data_ini = Convert.ToDateTime(dr[DATA_INICIO].ToString());
string hora_ini = dr[HORA_INICIO].ToString();
string hora_fim = dr[HORA_FIM].ToString();
string duracao = dr[DURACAO].ToString();
string ocorrencia = dr[OCORRENCIA].ToString();
string diagnostico = dr[DIAGNOSTICO].ToString();
string responsavel = dr[RESPONSAVEL].ToString();

DataRow dw = dt.NewRow();
dw[0] = data_ini;
dw[1] = hora_ini;
dw[2] = hora_fim;
dw[3] = duracao;
dw[4] = ocorrencia;
dw[5] = diagnostico;
dw[6] = responsavel;
dt.Rows.Add(dw);
}
}
}
catch (Exception excecao)
{
Erro = excecao.Message;
}
finally
{
oracleConexao.Close();
}
dsVerDados.Tables.Clear();
dsVerDados.Tables.Add(dt);

DsRetorno = dsVerDados;

return DsRetorno;
}
Pjava

Pjava

Curtidas 0

Respostas

Joel Rodrigues

Joel Rodrigues

07/05/2012

Cara, se está pulando para o CATCH é por que está ocorrendo uma exceção, veja qual é e poste aqui o erro. Ah, se você usa o ExecuteReader, não precisa do ExecuteNonQuery, até por que você está fazendo uma consulta (Query).
GOSTEI 0
Pjava

Pjava

07/05/2012

Olá Joel, Resolvi o problma. Estou tão acostumado com Sql Server, que no Oracle há coisas diferentes. Eu criei essa tabela agora pelo Sql developer. Acontece que dentro do ambiente Sql Developer, essa tabela existe, mas para outros ambientes não, até eu dar um COMMIT. Foi o que faltou. COMMITEI a criação da tabela e agora o VS encherga ela. Valeu.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

07/05/2012

Que bom que funcionou.
Obrigado por postar a solução.
GOSTEI 0
POSTAR