string strConn = "Data source = XE; user = system; Password = 123456;";
OracleConnection oracleConn = new OracleConnection(strConn);
oracleConn.Open();
//if (oracleConn.State == ConnectionState.Open)
//{
//    MessageBox.Show("连接成功");----连接是成功的
//    return;
//}
string strSql = "select * from student;";
OracleCommand sqlCmd = new OracleCommand(strSql, oracleConn);
OracleDataAdapter oda = new OracleDataAdapter(sqlCmd);
DataTable dt = new DataTable();
try
{
    if (oracleConn.State == ConnectionState.Open)
    {
        int xx = 1; // 验证是连接成功的
    }
    oda.Fill(dt); // 但这儿出错了,catch不到具体原因
}
catch (System.IndexOutOfRangeException error)
{
    string strErr = error.Message;
    Console.Write(strErr);
}调试窗口有这个错误:
A first chance exception of type 'System.Data.OracleClient.OracleException' occurred in System.Data.OracleClient.dll   

解决方案 »

  1.   

    catch (Exception error)
    你捕获了一个具体的错误类型,而忽略了其他错误类型,结果把数据库错误给忽略了。不知道具体错误类型的情况下,就直接用基类Exception 来捕获
      

  2.   

    将System.IndexOutOfRangeException改为Exception,捕获异常信息看看是什么。
      

  3.   

    string strErr = error.ToString();
    `用这个可以知道具体的异常。捕获一下看看吧。
      

  4.   

    OracleCommand sqlCmd = new OracleCommand(strSql, oracleConn);
    OracleDataAdapter oda = new OracleDataAdapter(sqlCmd);
    /*--------------------*/
    OracleDataAdapter oda = new OracleDataAdapter(strSql, oracleConn);
      

  5.   

    System.Data.OracleClient.OracleException: ORA-00911: 无效字符   at System.Data.OracleClient.OracleConnection.CheckError(OciErrorHandle errorH
    andle, Int32 rc)
       at System.Data.OracleClient.OracleCommand.Execute(OciStatementHandle statemen
    tHandle, CommandBehavior behavior, Boolean needRowid, OciRowidDescriptor& rowidD
    escriptor, ArrayList& resultParameterOrdinals)
       at System.Data.OracleClient.OracleCommand.Execute(OciStatementHandle statemen
    tHandle, CommandBehavior behavior, ArrayList& resultParameterOrdinals)
       at System.Data.OracleClient.OracleCommand.ExecuteReader(CommandBehavior behav
    ior)
       at System.Data.OracleClient.OracleCommand.ExecuteDbDataReader(CommandBehavior
     behavior)
       at System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandB
    ehavior behavior)
       at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[]
     datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand co
    mmand, CommandBehavior behavior)
       at System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32 startR
    ecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior)
       at System.Data.Common.DbDataAdapter.Fill(DataTable dataTable)
       at HelloWorld.DataOracle.Main(String[] args) in C:\Documents and Settings\007
    924\My Documents\Visual Studio 2008\Projects\HelloWorld\HelloWorld\Program.cs:li
    ne 31
      

  6.   

    string strSql = "select * from student;";
    改为
    string strSql = "select * from student";也就是去掉最后的封号,Oracle的外部查询不支持带封号的