使用C#

时间:2017-10-27 09:45:50

标签: 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();

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

2 个答案:

答案 0 :(得分:1)

发生了几个原因。

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

尝试: -

int purchasePriceint = Convert.ToInt32(myReader["purchase_price"]);
int retailPriceint = Convert.ToInt32(myReader["retail_price"]);

答案 1 :(得分:1)

首先,根据查询

    select retail_price,
           purchase_price
      from productdetails 
     where item_name = :item_name

retail_price的实际类型以及purchase_price可能是某个浮点值类型(doubledecimal;说,8.95$ == 8.95):

   decimal retail_price = Convert.ToDecimal(myReader[0]);
   decimal purchase_price = Convert.ToDecimal(myReader[1]);

如果你坚持整数,围绕他们(8.95$ == 8.95 -> 9);假设价格非负

   int retail_price = (int) (Convert.ToDouble(myReader[0]) + 0.5);
   int purchase_price = (int) (Convert.ToDouble(myReader[1]) + 0.5);