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

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

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

есть мой код моя сессия не преобразовать в целое ошибкаконвертировать строковое значение в целое

«Входная строка не была в правильном формате.»

+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); 
    } 
} 
} 

метод Extension ...

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

'int.TryParse' возвращает bool не int, вам нужно вместо этого возвратить' result'. –

+0

Исправлено. Я скопировал метод расширения из сети и предположил, что он похож на тот, который находится в моей частной утилите. Похоже, но немного другое. – mason

0

Я думаю, что строка, которую вы пытаетесь преобразовать в целое пуст или содержит символы, это не цифры (в основном ваша строка не представляет собой целое число, в строковой форме). Вот почему вы получаете это сообщение об ошибке.

Так, по крайней мере, вы должны заменить ваш

if (EnquiryID != null) 

с

if(!string.IsNullOrWhiteSpace(EnquiryID)) 

Вот как вы будете знать, что если вы пытаетесь преобразовать переменную он, по крайней мере что-то преобразовать.

И использовать функцию Int32.TryParse() для проверки (и преобразования в целое число), если строка, которую вы пытаетесь преобразовать, является целым числом.

+0

Этот код по-прежнему не захватывает нецифровые символы. – mason

+0

@ msm8bball, так что вы думаете, что Int32.TryParse() не поможет вам понять, что строка содержит символы с цифрой? –

+0

Нет, я отредактировал комментарий, чтобы сказать, что ваш код не поймает его. Очевидно, Int32.TryParse() поймает его. – mason

Смежные вопросы