Meu código não entra no laço
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;
}
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
Curtidas 0
Respostas
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
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
07/05/2012
Que bom que funcionou.
Obrigado por postar a solução.
Obrigado por postar a solução.
GOSTEI 0