C# 使用C从Oracle数据库返回Int值#

C# 使用C从Oracle数据库返回Int值#,c#,database,oracle,C#,Database,Oracle,我试图使用C#从Oracle数据库返回INTEGER值,但它给了我以下异常 发生类型为“System.InvalidCastException”的未处理异常 在System.Data.dll中 其他信息:指定的强制转换无效 有人能帮我解决这个问题吗 这是我的密码: OleDbConnection con = new OleDbConnection( "Provider=MSDAORA;Data Source=xe;User ID=hr; password=123"); con.Open

我试图使用C#从Oracle数据库返回
INTEGER
值,但它给了我以下异常

发生类型为“System.InvalidCastException”的未处理异常 在System.Data.dll中

其他信息:指定的强制转换无效

有人能帮我解决这个问题吗

这是我的密码:

OleDbConnection con = new OleDbConnection(
  "Provider=MSDAORA;Data Source=xe;User ID=hr; password=123");
   con.Open();

String cmd1 = 
  @"select retail_price,purchase_price from 
    productdetails where item_name='" + textBox1.Text + "'";

OleDbCommand a1 = new OleDbCommand(cmd1, con);
OleDbDataReader myReader = a1.ExecuteReader();

if (myReader.Read())
{
    int m = myReader.GetInt32(0);
    MessageBox.Show("" +m);
}

发生的原因有两个

首先,您的价格字段可能是十进制的。接下来,在访问读卡器上的字段时,可能需要更加明确

尝试:-


首先,根据查询

    select retail_price,
           purchase_price
      from productdetails 
     where item_name = :item_name
零售价格
购买价格
的实际类型可以是一些浮点值类型(
双精度
十进制
;例如,
8.95$==8.95
):

如果您坚持使用整数,请将其四舍五入(
8.95$==8.95->9
);假设价格为非负:


尝试
intm=Convert.ToInt32(myReader[0])
istead of
int m=myReader.GetInt32(0)您可能希望阅读。Microsoft
MSDAORA
提供程序已过时多年。使用Oracle provider
OraOLEDB.Oracle
@mjwills我无法获取您想要告诉的内容。你能解释一下吗?我建议读一读或。
    select retail_price,
           purchase_price
      from productdetails 
     where item_name = :item_name
   decimal retail_price = Convert.ToDecimal(myReader[0]);
   decimal purchase_price = Convert.ToDecimal(myReader[1]);
   int retail_price = (int) (Convert.ToDouble(myReader[0]) + 0.5);
   int purchase_price = (int) (Convert.ToDouble(myReader[1]) + 0.5);