2015-06-14 4 views
2

У меня есть следующий код C#, который я использую, чтобы попытаться запросить базу данных оракула. Я просто пытаюсь получить числовой результат, чтобы я мог выводить его на консоль и в конечном итоге удерживать его в переменной.Указанный прилив недействителен. Это потому, что я пытаюсь бросить объект?

я получаю следующее сообщение об ошибке, хотя:

System.InvalidCastException: Указанный бросок не действует на Oracle.DataAccess.Client.OracleDataReader.GetInt32 (Int32 I)

Я использую VS 2012 на профессиональной машине Windows. Пожалуйста, дайте мне знать, если мне нужно добавить дополнительную информацию. Любая помощь очень ценится.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using Oracle.DataAccess.Client; 
using Oracle.DataAccess.Types; 
using System.Configuration; 
using System.Data.SqlClient; 

namespace OB_837_File_Reconciliation_Rpt_Automation 
{ 
    class Program 
    { 
    static void Main(string[] args) 
    { 
     OracleConnection dbConnection; 
     string connectionString = "Data Source=(DESCRIPTION=(ADDRESS=    (PROTOCOL=TCP)(HOST=*******)(PORT=******))(CONNECT_DATA=(SERVICE_NAME=******)));User ID=*****;Password=*********"; 
     try 
     { 
      dbConnection = new OracleConnection(connectionString);     
      string query = "select count (*) AS AMG_Prof from wellmed_owner.claim c inner join WELLMED_OWNER.payment_detail pd on c.claim_id = pd.claim_id where c.claim_status in ('6','8','C') and c.insured_group_id in ('ASA','AEP') and c.form_type = '1' and trunc(pd.paid_date) = trunc(sysdate -4)"; 
      dbConnection.Open(); 
      OracleCommand comm = new OracleCommand(query, dbConnection);    
      OracleDataReader rdr = comm.ExecuteReader(); 
      rdr.Read();     
      int count = (int)comm.ExecuteScalar(); 
      Console.WriteLine(count); 
      //int num = rdr.GetInt32(0); 
      //Console.WriteLine(count);    
      Console.WriteLine("Connecting Okay"); 

     } 
    catch (Exception e) 
    { 
     Console.WriteLine(e); 
    } 

     } 
    } 
} 
+0

Большое спасибо вам обоим. Работало. 'Результат объекта = comm.ExecuteScalar(); int count = Convert.ToInt32 (результат); 'любой из вас может рекомендовать хороший источник обучения. Не знаю, с чего начать. Источники в Интернете, которые я пробовал, очень сбиты. Еще раз спасибо. – jjones150

ответ

2

использование ExecuteScalar

dbConnection.Open(); 
OracleCommand comm = new OracleCommand(query, dbConnection);    
decimal count = (decimal)comm.ExecuteScalar(); 
Console.WriteLine(count);    
Console.WriteLine("Connecting Okay"); 
+0

Спасибо доктору. Тем не менее, я все еще получаю одно и то же сообщение. Что еще вы можете придумать? – jjones150

+0

На какой строке вы получаете исключение? можете ли вы обновить свой вопрос с обновленным кодом и полной схемой исключения? – dotctor

+0

Представление 'ExecuteScalar()' должно было быть комментарием, если оно должно было быть опубликовано вообще. Это явно не может решить настоящую проблему, поэтому не должно быть опубликовано как ответ. – hvd

0

Ваш запрос возвращает только одно значение, поэтому использовать ExecuteScalar вместо ExecuteReader.

Object result = comm.ExecuteScalar(); 
if(result != null) 
{ 
    decimal count = (decimal) result; 
} 
+0

Итак, вместо OracleDataReader rdr = comm.ExecuteReader(); Я бы получил OracleDataReader rdr = comm.ExecuteScalar() ;? Что бы я изменил OracleDataReader? – jjones150

+0

Представление 'ExecuteScalar()' должно было быть комментарием, если оно должно было быть опубликовано вообще. Это явно не может решить настоящую проблему, поэтому не должно быть опубликовано как ответ. – hvd

+0

Актуальной проблемой является использование ExecuteReader. –