И еще пару слов о DateTime
От:
САС
Дата: 26.11.02 07:08
Оценка:
Еще одна проблемка с датами, надеюсь последняя
Получаю дату из Sql Server 2000:
string s = sqlReader["date" ].ToString();
DateTime dt = DateTime.Parse(s);
Но в dt ничего не заносится. Ошибок тоже никаких нет.
Re: И еще пару слов о DateTime
Здравствуйте, САС, Вы писали:
САС>Еще одна проблемка с датами, надеюсь последняя
САС>Получаю дату из Sql Server 2000:
САС>САС>string s = sqlReader["date" ].ToString();
САС>DateTime dt = DateTime.Parse(s);
САС>
САС>Но в dt ничего не заносится. Ошибок тоже никаких нет.
Что мешает использовать Convert.ToDateTime(sqlReader["date"]) ?
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re: И еще пару слов о DateTime
Здравствуйте, САС, Вы писали:
САС>САС>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, Вы писали:
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
Здравствуйте, САС, Вы писали:
САС>Можно, просто я не знаю, как получить номер столбца по его имени. Не подскажешь?
Подскажу.
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
Здравствуйте, САС, Вы писали:
САС>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
Здравствуйте, САС, Вы писали:
САС>То же. Т.е. 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
Здравствуйте, САС, Вы писали:
САС>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
B> Потому что GetOrdinal() чувствителен к регистру.
В MSDN-е написано другое:
GetOrdinal performs a case -sensitive lookup first. If it fails, a second case -insensitive search is made
Re[13]: И еще пару слов о DateTime
Здравствуйте, САС, Вы писали:
САС>Точно. Да и иначе было бы другое исключение.
А если делаешь все через индексатор, то начинает работать??????
А если попробовать прочитать
sqlReader[4], а не sqlReader["date"]?
Re[13]: И еще пару слов о DateTime
Здравствуйте, DarkGray, Вы писали:
DG>В MSDN-е написано другое:
DG>DG>GetOrdinal performs a case -sensitive lookup first. If it fails, a second case -insensitive search is made
DG>
Упс... точно.
Лоханулся.
Пока на собственное сообщение не было ответов, его можно удалить.
Удалить