2013-05-30 256 views
-4
if (!IsPostBack) 
{ 
    string EnquiryID = (Session["Enq_ID"].ToString()); 

    if (EnquiryID != null) 
    { 
     int Enquiry = Convert.ToInt32(EnquiryID); 

     hotelOBJ.FillbyQueryEnquiry1(Enquiry, txtClientph, txtClientAddress); 
    } 
} 

有我的代码我的会话没有转换成整数的错误是转换字符串值为int

“输入字符串的不正确的格式。”

+1

您是否使用Int32.TryParse。 – cheedep

+2

如果字符串中有无法转换为int的字符,通常会看到该错误。 – JaySilk84

+0

另一个尝试此Convert.Int32 ... –

回答

3

错误说可能有一些字符在任何情况下都不能转换为Integer,如1234ab包含字符ab,这些字符不能转换为Integer。

你可以做的是:

bool result = Int32.TryParse(Session["Enq_ID"].ToString(), out number); 

if (result) 
{ 
    hotelOBJ.FillbyQueryEnquiry1(number, txtClientph, txtClientAddress); 
} 
else 
{ 
    Console.WriteLine("Attempted conversion of '{0}' failed.", 
         Session["Enq_ID"].ToString()); 
} 
0

使用Int32.Parse()。当解析时要小心FormatException,它首先使用TryParse或在扩展方法中包装TryParse。还要改变你的if语句。如果您的查询字符串参数丢失,现在您拥有它的方式可能会导致NullReferenceException。

if (!IsPostBack) 
{ 
if (Session["Enq_ID"] != null) 
{ 
string EnquiryID = Session["Enq_ID"].ToString(); 
if (EnquiryID.IsValidInt32()) 
    { 
    int Enquiry =Int32.Parse(EnquiryID); 
    hotelOBJ.FillbyQueryEnquiry1(Enquiry, txtClientph, txtClientAddress); 
    } 
} 
} 

扩展方法...

public static bool IsValidInt32(this string value) 
{ 
    int result; 
    return int.TryParse(value, out result); 
} 
+0

'int.TryParse'返回一个bool不是int,你需要返回'result'。 –

+0

固定。我将网络中的扩展方法复制下来,并假定它就像我私人实用程序库中的扩展方法一样。类似,但略有不同。 – mason

0

我认为你尝试转换为int的字符串为空或包含的字符不是数字(基本上是你的字符串不表示一个整数值以字符串形式)。这就是为什么你得到这个错误信息。

那么至少你有你的

if (EnquiryID != null) 

if(!string.IsNullOrWhiteSpace(EnquiryID)) 

这就是你怎么会知道,如果你尝试转换变量它至少有一些转换为替代。

并且或者使用Int32.TryParse()函数来测试(并转换为整数)如果您尝试转换的字符串是整数。

+0

此代码仍然不会捕获非数字字符。 – mason

+0

@ msm8bball所以你认为Int32.TryParse()不会帮助你理解字符串包含非数字字符的事实吗? –

+0

不,我编辑了评论,说你的代码无法捕捉它。显然Int32.TryParse()会捕获它。 – mason