4

我正在尝试为一个项目编写代码,但无效的特定转换错误不断出现。任何人都可以帮助我,因为我很难过。提前致谢。

Server Error in '/c#project' Application.

Specified cast is not valid.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.InvalidCastException: Specified cast is not valid.

Source Error: 


Line 39:         cmd.Parameters.Add("@ProductId", OleDbType.Char).Value = strProductId;
Line 40:         object oQty = cmd.ExecuteScalar();
Line 41:         int intQuantityOnHand = (int)oQty;
Line 42:         mDB.Close();
Line 43:         int intBuyQuantity = int.Parse(ddlQty.Items[ddlQty.SelectedIndex].ToString());

Source File: c:\Users\jacob\Desktop\c#project\ProductDetails.aspx.cs    Line: 41 

Stack Trace: 


[InvalidCastException: Specified cast is not valid.]
   ProductDetails.btnBuy_Click(Object sender, EventArgs e) in c:\Users\jacob\Desktop\c#project\ProductDetails.aspx.cs:41
   System.Web.UI.WebControls.Button.OnClick(EventArgs e) +118
   System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +112
   System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5563

Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.272
4

5 回答 5

4

第 41 行:显然oQty不能转换为Int32. 尝试

int intQuantityOnHand = Convert.ToInt32(oQty);
于 2012-06-18T19:52:44.403 回答
0

尝试这个:

object oQty = cmd.ExecuteScalar();
int? intQuantityOnHand = (oQty as int);

然后检查if(intQuantityOnHand !=null)

于 2012-06-18T22:58:17.027 回答
0

ExecuteScalar返回结果集中第一行的第一列,或空引用。这可以是任何东西;整数、null、字符串、varbinary。您必须检查查询的第一列的类型并分配给该类型的变量。

另外,你为什么这样做:

int intBuyQuantity = int.Parse(ddlQty.Items[ddlQty.SelectedIndex].ToString());

您正在将某些内容转换为字符串,然后将字符串转换为整数。为什么?它是一个字符串吗?那么这可能会引发异常。是整数吗?然后将其读取为整数。你在用System.Data.SqlClient吗?其中包含GetInt32返回正确类型数据的方法;你不需要强制转换、解析或其他任何东西。

于 2013-06-12T19:35:04.447 回答
0

如果您的结果集为空,您应该进行一次空检查。

if(oQty!=null){
  int intQuantityOnHand = (int)oQty;
}

那,或者默认你的价值......

  int intQuantityOnHand = (oQty==null) ? 0 : (int)oQty;

根据 MSDN,ExecuteScalar返回

[t]结果集中第一行的第一列,如果结果集为空,则为空引用(在 Visual Basic 中为 Nothing)。返回最多 2033 个字符。

于 2012-06-18T20:02:18.410 回答
0

我相信错误在第 41 行。在第 41 行设置断点,看看 oQty 的值是多少。它可能为空。

于 2012-06-18T19:53:42.313 回答