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

07/05/2012

0

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

Responder

Posts

07/05/2012

Joel Rodrigues

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).
Responder

07/05/2012

Pjava

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.
Responder

13/05/2012

Joel Rodrigues

Que bom que funcionou.
Obrigado por postar a solução.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar