Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/60: Рейтинг темы: голосов - 60, средняя оценка - 5.00
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. Показов 12419. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
На моем компе программа работает, а на сервере
получаю ошибку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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru