我正在尝试使用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);
}
答案 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
可能是某个浮点值类型(double
或decimal
;说,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);