2013-05-30 152 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