И еще пару слов о DateTime
От: САС  
Дата: 26.11.02 07:08
Оценка:
Еще одна проблемка с датами, надеюсь последняя

Получаю дату из Sql Server 2000:

string s = sqlReader["date"].ToString();
DateTime dt = DateTime.Parse(s);


Но в dt ничего не заносится. Ошибок тоже никаких нет.
Re: И еще пару слов о DateTime
От: TK Лес кывт.рф
Дата: 26.11.02 07:10
Оценка:
Здравствуйте, САС, Вы писали:

САС>Еще одна проблемка с датами, надеюсь последняя


САС>Получаю дату из Sql Server 2000:


САС>
САС>string s = sqlReader["date"].ToString();
САС>DateTime dt = DateTime.Parse(s);
САС>


САС>Но в dt ничего не заносится. Ошибок тоже никаких нет.


Что мешает использовать Convert.ToDateTime(sqlReader["date"]) ?
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re: И еще пару слов о DateTime
От: Blazkowicz Россия  
Дата: 26.11.02 07:22
Оценка:
Здравствуйте, САС, Вы писали:

САС>
САС>string s = sqlReader["date"].ToString();
САС>DateTime dt = DateTime.Parse(s);
САС>


САС>Но в dt ничего не заносится. Ошибок тоже никаких нет.


А зачем надо через string все это парсить?
Ведь можно напрямую DateTime из базы читать и в DateTime писать.
Re[2]: И еще пару слов о DateTime
От: САС  
Дата: 26.11.02 07:24
Оценка:
Здравствуйте, TK, Вы писали:

TK>Что мешает использовать Convert.ToDateTime(sqlReader["date"]) ?


На самом деле все работало и так . Проверил, вызвав метод ToString() в созданном DateTime.
А ошибка крылась совсем в другом. Никак не могу запомнить, что таким образом ничего не выведется:
Console.Write("Дата: ", dt.Day+...);
Переписал "Дата: {1}..." и все.
Уже не в первый раз на этом попал
Re[2]: И еще пару слов о DateTime
От: САС  
Дата: 26.11.02 07:26
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>А зачем надо через string все это парсить?

B>Ведь можно напрямую DateTime из базы читать и в DateTime писать.

Если используется SqlDataReader?
Re[3]: И еще пару слов о DateTime
От: Blazkowicz Россия  
Дата: 26.11.02 07:31
Оценка:
Здравствуйте, САС, Вы писали:

САС>Здравствуйте, Blazkowicz, Вы писали:


B>>А зачем надо через string все это парсить?

B>>Ведь можно напрямую DateTime из базы читать и в DateTime писать.

САС>Если используется SqlDataReader?



DateTime date;

 if (sqlDataReader.Read()) 
{
    date = sqlDataReader.GetDateTime(0);        
 }


Почему нельзя сделать так?
Re[4]: И еще пару слов о DateTime
От: САС  
Дата: 26.11.02 07:39
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B> if (sqlDataReader.Read()) 
B>{
B>    date = sqlDataReader.GetDateTime(0);        
B> }


B>Почему нельзя сделать так?


Можно, просто я не знаю, как получить номер столбца по его имени. Не подскажешь?
Re[5]: И еще пару слов о DateTime
От: Blazkowicz Россия  
Дата: 26.11.02 07:43
Оценка:
Здравствуйте, САС, Вы писали:

САС>Можно, просто я не знаю, как получить номер столбца по его имени. Не подскажешь?


Подскажу.

sqlDataReader.GetOrdinal("date");


По-моему так.
Re[6]: И еще пару слов о DateTime
От: САС  
Дата: 26.11.02 07:58
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>sqlDataReader.GetOrdinal("date");


Падает с исключением: Unhandled Exception: System.FormatException: Index (zero based) must be greater
than or equal to zero and less than the size of the argument list.

Пробовал просто задать номер столбца (числом), падает также.
Re[7]: И еще пару слов о DateTime
От: Blazkowicz Россия  
Дата: 26.11.02 08:10
Оценка:
Здравствуйте, САС, Вы писали:


САС>
B>>sqlDataReader.GetOrdinal("date");
САС>


САС>Падает с исключением:


Именно эта строчка падает?

Или падает уже GetDateTime()?
А какое исключение, если в GetDateTime() задать явно столбец?
Re[8]: И еще пару слов о DateTime
От: САС  
Дата: 26.11.02 08:47
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>>>sqlDataReader.GetOrdinal("date");


САС>>Падает с исключением:

B>Именно эта строчка падает?
B>Или падает уже GetDateTime()?

GetDateTime.

B>А какое исключение, если в GetDateTime() задать явно столбец?


То же. Т.е. GetOrdinal("date") возвращает правильный номер столбца (4). Пробовал задать его явно — GetDateTime(4), ошибка та же.
Re[9]: И еще пару слов о DateTime
От: Blazkowicz Россия  
Дата: 26.11.02 09:08
Оценка:
Здравствуйте, САС, Вы писали:

САС>То же. Т.е. GetOrdinal("date") возвращает правильный номер столбца (4). Пробовал задать его явно — GetDateTime(4), ошибка та же.


А ты делаешь
if(sqlDataReader.Read())
{

}

или

while(sqlDataReader.Read())
{

}

?
Можешь код привести?
Re[10]: И еще пару слов о DateTime
От: САС  
Дата: 26.11.02 09:30
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Можешь код привести?


SqlCommand sqlComm = new SqlCommand("select * from program",conn);
SqlDataReader sqlReader = sqlComm.ExecuteReader();
while (sqlReader.Read())
{
DateTime dt = sqlReader.GetDateTime(4);
//or
DateTime dt = sqlReader.GetDateTime(sqlReader.GetOrdinal("date").ToString());
}
sqlReader.Close();
Re[11]: И еще пару слов о DateTime
От: Blazkowicz Россия  
Дата: 26.11.02 09:37
Оценка:
Здравствуйте, САС, Вы писали:

САС>SqlCommand sqlComm = new SqlCommand("select * from program",conn);

САС>SqlDataReader sqlReader = sqlComm.ExecuteReader();
САС>while (sqlReader.Read())
САС>{
САС> DateTime dt = sqlReader.GetDateTime(4);
САС> //or
САС> DateTime dt = sqlReader.GetDateTime(sqlReader.GetOrdinal("date").ToString());
А зачем ToString???
САС>}
САС>sqlReader.Close();

И попробуй
sqlReader.GetOrdinal("date")
вынести из цикла и записать в переменную.
а потом делать.

dt = sqlReader.GetDateTime(iColumnNo);

А в programm точно 5й столбец "date"? Потому что GetOrdinal() чувствителен к регистру.
Re[12]: И еще пару слов о DateTime
От: САС  
Дата: 26.11.02 10:05
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

САС>> DateTime dt = sqlReader.GetDateTime(4);

САС>> //or
САС>> DateTime dt = sqlReader.GetDateTime(sqlReader.GetOrdinal("date").ToString());
B>А зачем ToString???

Не то скопировал Нет его там конечно.

B>И попробуй

B>sqlReader.GetOrdinal("date")
B>вынести из цикла и записать в переменную.
B>а потом делать.

Я же специально две строчки привел. Независимо от того, какая комментируется, возникает исключение. Т.е. дело явно не в GetOrdinal.

B>dt = sqlReader.GetDateTime(iColumnNo);

B>А в programm точно 5й столбец "date"? Потому что GetOrdinal() чувствителен к регистру.

Точно. Да и иначе было бы другое исключение.
Re[12]: И еще пару слов о DateTime
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 26.11.02 10:11
Оценка:
B> Потому что GetOrdinal() чувствителен к регистру.

В MSDN-е написано другое:
GetOrdinal performs a case-sensitive lookup first. If it fails, a second case-insensitive search is made
Re[13]: И еще пару слов о DateTime
От: Blazkowicz Россия  
Дата: 26.11.02 10:19
Оценка:
Здравствуйте, САС, Вы писали:

САС>Точно. Да и иначе было бы другое исключение.


А если делаешь все через индексатор, то начинает работать??????
А если попробовать прочитать
sqlReader[4], а не sqlReader["date"]?
Re[13]: И еще пару слов о DateTime
От: Blazkowicz Россия  
Дата: 26.11.02 10:21
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>В MSDN-е написано другое:

DG>
DG>GetOrdinal performs a case-sensitive lookup first. If it fails, a second case-insensitive search is made
DG>


Упс... точно.
Лоханулся.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.