sexta-feira, 16 de outubro de 2009

Oracle.DataAccess.Client - System.InvalidOperationException: A operação não é válida devido ao estado atual do objeto



Este erro parece coisa boba, mais é mais comum de acontecer do que parece...

A operação não é válida devido ao estado atual do objeto.
Descrição: Ocorreu uma exceção não tratada durante a execução da atual solicitação da Web. Examine o rastreamento de pilha para obter mais informações sobre o erro e onde foi originado no código.

Detalhes da Exceção: System.InvalidOperationException: A operação não é válida devido ao estado atual do objeto.


[InvalidOperationException: A operação não é válida devido ao estado atual do objeto.]
Oracle.DataAccess.Client.OracleDataReader.IsDBNull(Int32 i) +531
Oracle.DataAccess.Client.OracleDataReader.GetValue(Int32 i) +113
Oracle.DataAccess.Client.OracleDataReader.get_Item(Int32 i) +10
_Default.Page_Load(Object sender, EventArgs e) in c:\Inetpub\wwwroot\WebSite1\Default.aspx.cs:25
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35
System.Web.UI.Control.OnLoad(EventArgs e) +99
System.Web.UI.Control.LoadRecursive() +50
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627


Exemplo de código que acontece esse erro:


OracleConnection con = new OracleConnection(strcon);
con.Open();
OracleCommand cmd = new OracleCommand("select * from images where rownum < 10 ", con);
cmd.CommandType = CommandType.Text;
OracleDataReader reader = cmd.ExecuteReader();

Response.Write(reader[0].ToString() + "
");

reader.Close();
reader = null;
con.Clone();
con = null;



O problema é simples de resolver... basta incluir a linha:


reader.Read();


pois para usar o datareader é necessário fazer a leitura antes.

0 comentários:

Postar um comentário