Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Почему не выполняется код в блоке с try { }? / 10 сообщений из 10, страница 1 из 1
11.03.2005, 11:11
    #32955043
Bagin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему не выполняется код в блоке с try { }?
Здравствуйте!
Возникла проблема с try-catch на стадии компиляции. Есть такой код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
private void Page_Load(object sender, System.EventArgs e)
{
	if (!this.Page.IsPostBack)
	{
		this.textDateB.Value = DateTime.Now.AddDays(- 7 ).ToString("d");
		this.textDateE.Value = DateTime.Now.AddDays( 7 ).ToString("d");
	}	
	DateTime DateB, DateE;
	try
	{
		DateB = System.Convert.ToDateTime(this.textDateB.Value);
		DateE = System.Convert.ToDateTime(this.textDateE.Value);
	}
	catch (Exception err) 
	{
		// на время отладки, потом заменить на сообщение 
		// об ошибке при вводе даты:
		Response.Write(err.Message);   
	} 
	..................
	sqlCmd.Parameters.Add("@DateTimeB", DbType.DateTime).Value = DateB;
	// !!!!!!!!!!!!!! Вот здесь ругается:
	// Use of unassigned local variable 'DateB'

	sqlCmd.Parameters.Add("@DateTimeE", DbType.DateTime).Value = DateE;
	// !!!!!!!!!!!!!! Вот здесь ругается:
	// Use of unassigned local variable 'DateE'
	.................
}
Когда блок try - catch убираю или просто просто перемещаю за ее пределы следующий код:
Код: plaintext
1.
DateB = System.Convert.ToDateTime(this.textDateB.Value);
DateE = System.Convert.ToDateTime(this.textDateE.Value);
то компилируется и выполняется нормально. Что я здесь делаю не так?
Заранее спасибо.
...
Рейтинг: 0 / 0
11.03.2005, 11:29
    #32955109
profil
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему не выполняется код в блоке с try { }?
дык правильно ругается.
если произошла ошибка, которая корректно обработалась, какую дату ты собираешься передавать в sqlCmd?!

либо перенеси передачу параметров в блок try, либо в catch задай альтернативную дату
...
Рейтинг: 0 / 0
11.03.2005, 11:40
    #32955154
Bagin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему не выполняется код в блоке с try { }?
Дело в том, что ругается то при компиляции, а не при выполнении приложения, т.е. еще не известно, как будет обрабатываться сообщение об ошибке, может я в catch { } пропишу досрочное завершение работы скрипта.
Да и при первоначальном запуске страницы ошибка конвертации не возникает, проверял убрав try-catch, т.е. вроде он должен выполнить код в блоке try корректно. Эту обработку ставлю на случай, если пользователь введет даты некорректно. Или я что-то не догоняю
...
Рейтинг: 0 / 0
11.03.2005, 11:45
    #32955178
gerss
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему не выполняется код в блоке с try { }?
Компилятор ругается на использование неинициализированных переменных.
Попробуй написать
Код: plaintext
1.
2.
DateTime DateB = DateTime.Now;
DateTime DateE = DateTime.Now;

Судя по коду, проблем это не создаст, а для компиллера переменные будут инициализированы.

Сергей
...
Рейтинг: 0 / 0
11.03.2005, 11:55
    #32955212
profil
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему не выполняется код в блоке с try { }?
правильно говорит gerss, сначала надо инициализировть переменные (вобщем и компилятор тебе сообщает о том же )
...
Рейтинг: 0 / 0
11.03.2005, 12:07
    #32955262
Bagin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему не выполняется код в блоке с try { }?
Спасибо, получилось! :-)
Но только все равно не пойму, например такой код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
try
{
	DateB = System.Convert.ToDateTime(this.textDateB.Value);
}
catch (Exception err) 
{
	............  // Вывод сообщения об ошибке
	return;
} 
....................
При корректной конвертации переменная DateB будет инициализирована, а если нет, то она и не нужна будут вообще, т.к. программа завершается.
...
Рейтинг: 0 / 0
11.03.2005, 13:25
    #32955546
gerss
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему не выполняется код в блоке с try { }?
Так компилятору сие неизвестно. Он видит, что код инициализации может не выполниться и считает, что переменная может быть не инициализирована. Он же всю логику работы программы не отслеживает...

Сергей
...
Рейтинг: 0 / 0
11.03.2005, 13:33
    #32955577
Bagin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему не выполняется код в блоке с try { }?
Понятно. Какой-то не доученный компилятор, отследить то, что переменная может оказаться не инициализированной хватает ума, а дальше нет
Спасибо за помощь. Я думал что ошибка в самом применении обработки исключений.
...
Рейтинг: 0 / 0
11.03.2005, 14:11
    #32955719
profil
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему не выполняется код в блоке с try { }?
компилятор-то нормальный, а вот логика в примере - отсутствовала
сам подумай, зачем делать обработку исключения при преобразовании даты, если потом, при удачно обработанном исключении, произойдет ошибка при передачи не понятно чего в качестве параметра sql-комманды
...
Рейтинг: 0 / 0
11.03.2005, 14:15
    #32955734
Bagin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему не выполняется код в блоке с try { }?
Но у меня же прописано:
Код: plaintext
1.
2.
3.
4.
catch (Exception err) 
{
	............  // Вывод сообщения об ошибке
	return;
}
т.е. неинициализированная переменная использоваться не будет
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Почему не выполняется код в блоке с try { }? / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]