繁体   English   中英

指定的演员表无效。 是因为我试图投射一个对象吗?

[英]Specified cast is not valid. Is it because I am attempting to cast an object?

我有以下 C# 代码,用于尝试查询 oracle 数据库。 我只是想获得数字结果,以便我可以将其输出到控制台并最终将其保存在一个变量中。

我不断收到以下错误:

System.InvalidCastException:指定的强制转换在 Oracle.DataAccess.Client.OracleDataReader.GetInt32(Int32 i) 中无效

我在 Windows 专业机器上使用 VS 2012。 如果我需要添加其他信息,请告诉我。 非常感谢任何帮助。

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);
     }

        }
    }
}

使用ExecuteScalar

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

您的查询仅返回一个值,因此请使用 ExecuteScalar 而不是 ExecuteReader。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM