168 / 140 / 23
Регистрация: 02.01.2011
Сообщений: 913

The conversion of a nvarchar data type to a datetime data type resulted in an out-of-range value

25.08.2011, 11:24. Показов 11913. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
На моем компе программа работает, а на сервере
получаю ошибкуThe conversion of a nvarchar data type to a datetime data type resulted in an out-of-range value.

Обььясните, пожалуйста, как с ней бороться?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.08.2011, 11:24
Ответы с готовыми решениями:

Ошибка: The conversion of a varchar data type to a datetime data type resulted in an out-of-range value
Помогите решить ошибку Если в календаре выбираю дату больше 13 выдаёт ошибку The conversion of a varchar data type to a datetime data type...

The conversion of a varchar data type to a datetime data type resulted in an out-of-range value
Пытаюсь заполнить таблицу базы данных: USE CommercialNetworkSkript GO INSERT INTO Товар VALUES...

Conversion failed when converting the nvarchar value 'Label' to data type int.
Есть сайт Asp.net. Помогите разобраться, на локальном компьютере все работает нормально. Скинул на удаленный хостинг. При событии...

12
Заблокирован
25.08.2011, 12:14
без кода сложно сказать
посмею предположить, что формат нужно изменить с dd/mm/yyyy на mm/dd/yyyy

(языковые настройки наверное разные и формат даты тоже)
0
168 / 140 / 23
Регистрация: 02.01.2011
Сообщений: 913
25.08.2011, 12:45  [ТС]
Да, и настроики языковые разные , и формат разныи Только я в коде вроде это предусмотрела
Вот так
C#
1
2
3
 dataReport.Title = DataStorage[i].nUnit + "_" + DateTime.Now.ToString("MMM", CultureInfo.GetCultureInfo("en-us")) + "_" + DateTime.Now.Year.ToString(); //поле варцхар(100)
 
dataReport.CreationTime = DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString(); //поле datetime
И дебагнуть не могу! Сервер все время занят другими . И не знаю что делать. Месяц программа работала Правда вчера изменила (дописала) вот такой код
Может здесь проблема ,посмотрите, аDzhej-Dzhej?
C#
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
29
30
31
32
33
34
35
36
37
38
39
40
41
//.............
                for (int i = 0; i < Col.Count; i++)
                #region function from report
                    if (funcReport[i] == "MAX-MIN") //work obychnyi max-min 
                    {
                        strBuilder.Append("(SELECT (SELECT MAX(Channel");
                        strBuilder.Append(Col[i]);
                        strBuilder.Append(")");
                        strBuilder.Append(" FROM UnitData_");
                        strBuilder.Append(idUnit);
                        strBuilder.Append(" WHERE TimeStamp BETWEEN CONVERT(DATETIME, CONVERT(VARCHAR(15), ");
                        strBuilder.Append(" GETDATE(), 101))-1 AND CONVERT(DATETIME, CONVERT(VARCHAR(15),");
                        strBuilder.Append(" GETDATE(), 101))");
                        strBuilder.Append(" )-");
                        strBuilder.Append(" ( SELECT MAX(Channel");
 
                        strBuilder.Append(Col[i]);
                        strBuilder.Append(")");
                        strBuilder.Append(" FROM UnitData_");
                        strBuilder.Append(idUnit);
                        strBuilder.Append(" WHERE TimeStamp BETWEEN CONVERT(DATETIME, CONVERT(VARCHAR(15), ");
                        strBuilder.Append(" GETDATE(), 101))-2 AND CONVERT(DATETIME, CONVERT(VARCHAR(15),");
                        strBuilder.Append(" GETDATE(), 101))-1");
                        strBuilder.Append("))");
 
                    }
 
 
                    //--------------------------------------------------
                    if (i != (Col.Count - 1))
                    {
                        strBuilder.Append(" ,");
                        strBuilder.Append(strNameDBData);
 
                    }
 
                }
                #endregion
                strBuilder.Append(" FROM ");
                strBuilder.Append("UnitData_");
                strBuilder.Append(idUnit);
0
Заблокирован
25.08.2011, 14:34
здесь я затрудняюсь ответить, т.к. на шарпе с базами не работаю

возможно, вместо двойного конверта лучше записать типа
C#
1
string.Format("MMM/dd/yyyy", DateTime.Now.AddDays(-1));//вчера
и взять в одинарные кавычки
непонятно, почему именно CONVERT(VARCHAR(15)...)

еще функция МАХ медленная, лучше отсортировать по убыванию(ORDER BY поле DESC)
и поставить LIMIT 1, что даст только первое(заодно и максимальное) значение

Добавлено через 7 минут
и еще:
я так понимаю, код был вставлен, а не переделан из другого?
какая БД( а то синтаксис немного отличается)?
уточню, после добавления кода программа не работает только на сервере, а у вас все нормально?
0
168 / 140 / 23
Регистрация: 02.01.2011
Сообщений: 913
25.08.2011, 15:12  [ТС]
Да , у меня na kompe все нормально Задача в следуюшем Есть база данных на SQL Server 2008.
Моя программа на C# обрашается к базе, считывает данные , составляет текстовый фаил с определенным именем в определенном месте и записывает в таблицу этой базы данных когда и какой файл создан. Все.Пользователь захотел получить фаил, в котором есть Мах значение данных за сегодня минус Мах значение за вчера. Я написала программу, C# запускает запросы SQL , сеичас мне сказали, что это неправильно, а надо было использовать Stored Procedure(понятия не имею, что это)Вообшем, сеччас в лог файле обнаружила эту ошибку и не знаю, что делать ...

Добавлено через 6 минут
Да еше, CONVERT использую, чтобы удалить время, т.к. мне надо мах значения за сутки, т.е. от 24/08/11 00:00:00 до 25/08/11 00:00:00 минус от 23/08/11 00:00:00 до 24/08/11 00:00:00 . На моем компе формат времени дд-мм-гг, на сервер гггг-мм-дд

Добавлено через 15 минут
И еше вопрос если вчера это
C#
1
string.Format("MMM/dd/yyyy", DateTime.Now.AddDays(-1));//вчера
, то позавчера
C#
1
string.Format("MMM/dd/yyyy", DateTime.Now.AddDays(-2));
?
Или опять будет та же ошибка?
0
 Аватар для sigmov
585 / 372 / 63
Регистрация: 22.07.2009
Сообщений: 875
Записей в блоге: 4
25.08.2011, 16:04
Цитата Сообщение от iva_a Посмотреть сообщение
На моем компе программа работает, а на сервере
получаю ошибкуThe conversion of a nvarchar data type to a datetime data type resulted in an out-of-range value.
Обььясните, пожалуйста, как с ней бороться?
Сразу могу сказать 99% что ошибка происходит на стороне SQL сервака а не в коем случае не на стороне C#.

Так же ясно что ошибка происходит при конверсии строки в дату.

А вот это вообще убило:
SQL
1
WHERE TIMESTAMP BETWEEN CONVERT(DATETIME, CONVERT(VARCHAR(15), GETDATE(), 101))-2 AND CONVERT(DATETIME, CONVERT(VARCHAR(15), GETDATE(), 101))-1
Сначала текущая дата конвертируется в строку, потом обратно в дату.....
В чем логика?

Попробуйте что-то типа:
SQL
1
WHERE DATE(TIMESTAMP) BETWEEN (GETDATE()-2) AND (GETDATE()-1)
1
168 / 140 / 23
Регистрация: 02.01.2011
Сообщений: 913
25.08.2011, 16:45  [ТС]
Спасибо, sigmov, уже сама дошла, что надо менять именно обращение с датои. хочу эту дату написать в коде C#. Сеичас на меня опять наезжать будут, что повторяю темы Но вс-таки Вот так я получаю дату, текущую, вчерашнюю и позавчерашнюю Но как мне получить именно полночь этои даты?
C#
1
2
3
string MyNow =DateTime.Now.AddDays().ToString("d");           
string MyDayYesterday = DateTime.Now.AddDays(-1).ToString("d");           
string MyDayBefore = DateTime.Now.AddDays(-2).ToString("d");
И последняя эта строчка не приведет к тем же проблемам?
0
Заблокирован
25.08.2011, 17:05
так попробуйте
C#
1
string MyDayYesterday = string.Format("{0:yyyy/MM/dd} 00:00:00", DateTime.Now.AddDays(-1))
.AddDays() без параметра можно не писать
1
 Аватар для sigmov
585 / 372 / 63
Регистрация: 22.07.2009
Сообщений: 875
Записей в блоге: 4
25.08.2011, 17:46
Цитата Сообщение от iva_a Посмотреть сообщение
Спасибо, sigmov, уже сама дошла, что надо менять именно обращение с датои. хочу эту дату написать в коде C#. Сеичас на меня опять наезжать будут, что повторяю темы Но вс-таки Вот так я получаю дату, текущую, вчерашнюю и позавчерашнюю Но как мне получить именно полночь этои даты?
C#
1
2
3
string MyNow =DateTime.Now.AddDays().ToString("d");           
string MyDayYesterday = DateTime.Now.AddDays(-1).ToString("d");           
string MyDayBefore = DateTime.Now.AddDays(-2).ToString("d");
И последняя эта строчка не приведет к тем же проблемам?
Немного неправильная на мой взгляд идея.
Потому как в timestamp будет время "с сервера", а вот DateTime.Now это время "с клиента". А часики то могут быть несинхронизированы.

У вас MSSQL сервер, я так полагаю?
Какой тип данных используется в столбце TimeStamp, полагаю timestamp?

Если прав - то запрос будет:
T-SQL
1
WHERE TimeStamp BETWEEN DATEADD(day,DATEDIFF(dd,0,GETDATE())-2, 0) AND DATEADD(day,DATEDIFF(dd,0,GETDATE())-1, 0)
P.S. Чтобы получить полночь нужно юзать DateTime.Today вместо DateTime.Now
P.P.S. Но скажу еще раз - что дату нужно выяснять средствами SQL сервера, а не C#
P.P.P.S Какое то дуратское в mssql преобразование datetime в чистые date или time

Добавлено через 13 минут
Цитата Сообщение от Dzhej-Dzhej Посмотреть сообщение
CONVERT(VARCHAR(15)...)
Оказывается таким образом в mssql "обрезается" время из datetime. )))
Сам удивился.

еще функция МАХ медленная, лучше отсортировать по убыванию(ORDER BY поле DESC)
и поставить LIMIT 1, что даст только первое(заодно и максимальное) значение
Весьма спорно.
За mssql не скажу, но в MySql Max работает быстрее.
2
Заблокирован
25.08.2011, 19:53
Цитата Сообщение от sigmov Посмотреть сообщение
Оказывается таким образом в mssql "обрезается" время из datetime.
"yyyy/MM/dd " - одиннадцать символов, а как соотнести "00:00:00" и четыре оставшихся, вот это я не понял.

Не по теме:

Цитата Сообщение от sigmov Посмотреть сообщение
в MySql Max работает быстрее.
столкнулся когда-то с тем, что через limit было лучше, возможно из-за вложенных подзапросов, будет время нагрузить базу ~ 1 000 000 записей, проверю и отпишу.



Добавлено через 13 минут

Цитата Сообщение от iva_a Посмотреть сообщение
Stored Procedure
это хранимые процедуры, в них не ничего сложного(OFF давно я не видел MS SQL глазами, наверно тогда только С++ и паскаль знал /OFF),вроде как в MS SQL пишется функция, ее телом является ваш запрос и из с-шарпа вызывается через CALL.
гугл должен знать много примеров на эту тему.

Цитата Сообщение от iva_a Посмотреть сообщение
мне сказали, что это неправильно, а надо было использовать Stored Procedure
если сказало начальство, значит так и есть в любом случае
1
168 / 140 / 23
Регистрация: 02.01.2011
Сообщений: 913
26.08.2011, 23:47  [ТС]
Dzhej-Dzhej, формат timestamp на сервере вот такой
2011-08-22 00:02:00.000 Так что получается, что 4 символа это .000? А пробелы и тире не входят? И еше, обьясните мне, пожалуйста, что лучше, использовать функции работы с датои и временем внутри SQL запроса или использовать функции C# и передавать их в SQL запрос ? И почему? У меня SQL Server 2008. Программа на C# обрашается к базе данных. Начальство, к сожалению, к программированию отношения не имеет ...А коллеги разделились во мнениях ...

Добавлено через 41 минуту
Да, и еше,sigmov программа на C# бежит на сервере, так что, я не поняла при чем тут синхронизация?Часы-то одни и те же!
0
Заблокирован
27.08.2011, 00:12
iva_a, лучше сделайте хранимую процедуру в MS SQL, и вызывайте ее из C# запросом, будет меньше претензий от недоброжелателей. если дата хранится в формате"2011-08-22 00:02:00.000", то VARCHAR(15) превращается в VARCHAR(23)? (уже выпил, не могу посчитать!, да и завтра праздник...,извините)
1
168 / 140 / 23
Регистрация: 02.01.2011
Сообщений: 913
27.08.2011, 01:45  [ТС]
Dzhej-Dzhej, Спасибо! С праздником!Буду учиться! До связи!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.08.2011, 01:45
Помогаю со студенческими работами здесь

Conversion failed when converting the nvarchar value to data type int при подсчете записей
Пытаюсь подсчитать кол-во записей в таблице которые имеют введенный Логин, но встречаю эту ошибку: System.Data.SqlClient.SqlException:...

Conversion failed when converting the varchar value 'a1' to data type int
INT DEFAULT ((0)) NOT NULL, using (SqlConnection sqlCon = new SqlConnection(connection)) { ...

Поставщик Microsoft OLE DB для SQL Server (0x80040E07) Error converting data type nvarchar to decimal.
var Text = new String(mySmartUpload.Form.Item('Text').Values); var id_prize = mySmartUpload.Form.Item('id_prize').Values; var id=...

Работа с Sql. Исключение "Error converting data type nvarchar to real"
Здравствуйте, подскажите пожалуйста в чем именно проблема. Выдает ошибку в строчке &quot;while (reader.Read()) x++;reader.Close();&quot;,...

Error BC30466: Namespace or type 'Data' for the Imports 'System.Data' cannot be found
.NET beta 2 Пытаюсь писать vb под asp.net и откомпилять в dll... Вот заголовок: Imports System Imports System.Web Imports...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

Новые блоги и статьи
Вопросы на собеседованиях по микросервисам
ArchitectMsa 27.03.2025
Работодатели ищут не просто разработчиков, знающих базовые концепции, а специалистов, разбирающихся в тонкостях масштабирования, отказоустойчивости и производительности. Сейчас на первый план выходят. . .
Взаимодействие Python с REST API
py-thonny 27.03.2025
REST API - это архитектурный стиль взаимодействия компонентов распределённого приложения в сети. Python располагает функциональным набором инструментов для работы с REST API и основная библиотека для. . .
sshd restrictions, ssh access limitations
jigi33 26.03.2025
sshd restrictions | ssh access limitations рестрикции доступа на сервер sshd статья: https:/ / www. golinuxcloud. com/ restrict-allow-ssh-certain-users-groups-rhel
Компиляция C++ с Clang API
NullReferenced 24.03.2025
Компиляторы обычно воспринимаются как черные ящики, которые превращают исходный код в исполняемые файлы. Мы запускаем компилятор командой в терминале, и вуаля — получаем бинарник. Но что если нужно. . .
Многопоточное программировани­е в C#: Класс Thread
UnmanagedCoder 24.03.2025
Когда запускается приложение на компьютере, операционная система создаёт для него процесс - виртуальное адресное пространство. В C# этот процесс изначально получает один поток выполнения — главный. . .
SwiftUI Data Flow: Передача данных между представлениями
mobDevWorks 23.03.2025
При первом знакомстве со SwiftUI кажется, что фреймворк предлагает избыточное количество механизмов для передачи данных: @State, @Binding, @StateObject, @ObservedObject, @EnvironmentObject и другие. . . .
Моки в Java: Сравниваем Mockito, EasyMock, JMockit
Javaican 23.03.2025
Как протестировать класс, который зависит от других сложных компонентов, таких как базы данных, веб-сервисы или другие классы, с которыми и так непросто работать в тестовом окружении? Для этого и. . .
Архитектурные паттерны микросервисов: ТОП-10 шаблонов
ArchitectMsa 22.03.2025
Популярность микросервисной архитектуры объясняется множеством важных преимуществ. К примеру, она позволяет командам разработчиков работать независимо друг от друга, используя различные технологии и. . .
Оптимизация рендеринга в Unity: Сортировка миллиона спрайтов
GameUnited 22.03.2025
Помните, когда наличие сотни спрайтов в игре приводило к существенному падению производительности? Время таких ограничений уходит в прошлое. Сегодня геймдев сталкивается с задачами совершенно иного. . .
Образование и практика
Igor3D 21.03.2025
Добрый день А вот каково качество/ эффективность ВУЗовского образования? Аналитическая геометрия изучается в первом семестре и считается довольно легким курсом, что вполне справедливо. Ну хорошо,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru