C# 错误:指定的强制转换无效(Asp net、c、SQL)

C# 错误:指定的强制转换无效(Asp net、c、SQL),c#,asp.net,sql-server,visual-studio-2013,C#,Asp.net,Sql Server,Visual Studio 2013,确保会话[sOrderNo]上有值。看起来它不存在或值不可转换为整数 您可以做的是: SqlConnection con = new SqlConnection(@"Data Source=DESKTOP-IBPJNA2;Initial Catalog=GeometryFINAL;Integrated Security=True"); SqlCommand cmd; SqlDataReader rdr; int intOrderNo = (int)Session["sOrder

确保会话[sOrderNo]上有值。看起来它不存在或值不可转换为整数

您可以做的是:

SqlConnection con = new SqlConnection(@"Data Source=DESKTOP-IBPJNA2;Initial Catalog=GeometryFINAL;Integrated Security=True");
SqlCommand cmd;
SqlDataReader rdr;         
int intOrderNo = (int)Session["sOrderNo"]; //error is here
String strSql = "SELECT iProductID FROM orderItemsTable WHERE iOrderNo = " + intOrderNo;
cmd = new SqlCommand(strSql, con);

会话[sOrderNo]不存在,或者在设置

你需要先检查一下

SqlConnection con = new SqlConnection(@"Data Source=DESKTOP-IBPJNA2;Initial Catalog=GeometryFINAL;Integrated Security=True");
SqlCommand cmd;
SqlDataReader rdr;
if (Session["sOrderNo"] != null)
{
   int intOrderNo = 0;
   bool result = Int32.TryParse(Session["sOrderNo"], out intOrderNo );
   if (result)
   {
      String strSql = "SELECT iProductID FROM orderItemsTable WHERE iOrderNo = " + intOrderNo;
      cmd = new SqlCommand(strSql, con);  
   }
   else
   {
       //values are not convertable to integer....
   }
}
else
{
   //your session variable doesn't exist....
}        

在将会话值分配给变量orderno时,可能有两种情况

会话[sOrderNo]尚未初始化

会话[sOrderNo]不包含任何值

因此,为了处理这两种情况,最好的方法是

int intOrderNo = 0;
if(Session["sOrderNo"]!=null)
{
  int.TryPasre(Session["sOrderNo"].ToString(), out intOrderNo); 
}

您希望在该错误行设置断点,并查看该会话变量内的内容。此代码也可能引发异常,请改用TryParse。@AlexanderHiggins in wat away,Convert.ToInt32不会引发nullreference异常,我正在处理存在情况。。那么哪里可能出错呢;intOrderNo=Convert.ToInt32Session[sOrderNo];或者这个:公共类OrderNo{};会话[sOrderNo]=新订单号;intOrderNo=Convert.ToInt32Session[sOrderNo]@AlexanderHiggins实际上你说的只是另一种表达方式,
int intOrderNo = 0;
if(Session["sOrderNo"]!=null)
{
  intOrderNo = Convert.ToInt32(Session["sOrderNo"]); 
}