Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
Башир
207 / 207 / 20
Регистрация: 18.05.2010
Сообщений: 846
1

Параметр SqlDbType.Time ошибка при передаче

11.03.2012, 11:30. Просмотров 1256. Ответов 9
Метки нет (Все метки)

Есть таблица и хранимая процедура
SQL
1
2
3
4
5
6
7
8
9
10
11
CREATE TABLE t1(
id INT NOT NULL IDENTITY PRIMARY KEY,
tm TIME NOT NULL)
 
GO
 
CREATE proc p1
@id INT output,
@tm TIME output
AS
INSERT INTO t1(tm) VALUES(@tm)
к ней я обращяюсь так
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SqlConnection cn = new SqlConnection("Data Source=(local);Initial catalog=Test;Integrated Security=True");
SqlCommand sqlCommand = new SqlCommand("p1", cn) { CommandType = CommandType.StoredProcedure };
 
sqlCommand.Parameters.Add(new SqlParameter());
sqlCommand.Parameters[0].ParameterName = "@id";
sqlCommand.Parameters[0].SqlDbType = SqlDbType.Int;
sqlCommand.Parameters[0].Value = 1;
sqlCommand.Parameters[0].Direction = ParameterDirection.InputOutput;
 
sqlCommand.Parameters.Add(new SqlParameter());
sqlCommand.Parameters[1].ParameterName = "@tm";
sqlCommand.Parameters[1].SqlDbType = SqlDbType.Time;
sqlCommand.Parameters[1].Value = TimeSpan.FromSeconds(5);
sqlCommand.Parameters[1].Direction = ParameterDirection.InputOutput;
 
sqlCommand.ExecuteNonQuery();
и получаю в ответ примерно такое, в чем проблема?
0
Миниатюры
Параметр SqlDbType.Time ошибка при передаче  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.03.2012, 11:30
Ответы с готовыми решениями:

Ошибка the sqldbtype enumeration value 31 is invalid
Всем привет! Собственно, столкнулся с такой ошибкой (см. рисунок) на Windows...

Ошибка при передаче данных в таблицу, не работает Insert
Привет! У меня есть форма с кнопкой и текстовым окном. Я ввожу данные в...

Ошибка при передаче данных в GridView
Среда: WPF Ошибка: Произошла ошибка базового поставщика в Open. Код: ...

Ошибка при передаче изображения по TCP
Ошибка при передаче изображения по TCP? Клиент: Bitmap printscreen = new...

Ошибка в имени файла при передаче по e-mail
Здравствуйте. Пишу программу частичным заданием которой является отправка...

9
_katon_
384 / 240 / 19
Регистрация: 03.10.2011
Сообщений: 985
11.03.2012, 11:42 2
Проблема в этой строке:
C#
1
sqlCommand.Parameters[1].Value = TimeSpan.FromSeconds(5);
сюда надо передать именно дату а не временной интервал:
FromSeconds() - Возвращает объект TimeSpan, представляющий указанное количество секунд, округленное до ближайшей миллисекунды.
Если вам нужно сохранять интервал, то лучше хранить иго в числовом поле или в расчетном.
0
Башир
207 / 207 / 20
Регистрация: 18.05.2010
Сообщений: 846
11.03.2012, 11:48  [ТС] 3
Так у меня в БД хранится время, и такой же тип тоже ест, если мне надо передать 2 часа 22 минуты, то что мне надо дату передавать?. И дело в том что при использовании LinqToSQL все работает а при таком соединении не работает.

Добавлено через 1 минуту
И кроме того ведь это стандартный тип в БД и в C# тоже и они соответствуют друг другу
0
_katon_
384 / 240 / 19
Регистрация: 03.10.2011
Сообщений: 985
11.03.2012, 11:55 4
Я так и не понял, что нужно хранить в БД! Дату или временной интервал выраженный в секундах. Для даты в БД будет использоваться тип datetime, а для временного интервала можно использовать int(integer).
0
Башир
207 / 207 / 20
Регистрация: 18.05.2010
Сообщений: 846
11.03.2012, 11:58  [ТС] 5
нужно хранить временной интервал, но зачем для этого использовать int есть есть тип time? зачем что то преобразовавать при передаче и приеме если для этого есть стандартный тип, просто в БД не у одной таюлицы такое поле и менять придется много
0
_katon_
384 / 240 / 19
Регистрация: 03.10.2011
Сообщений: 985
11.03.2012, 12:05 6
Вот что написано на msdn:
Time - Данные времени в 24-часовом формате. Значение времени может находиться в диапазоне от 00:00:00 до 23:59:59.9999999 с точностью до 100 наносекунд. Соответствует значению time SQL Server.
т.е. используя этот элемент перечисления SqlDbType вы указываете хранить никак не интервал, а данные с типом производным от типа Datetime. Это время!!!! конкретное время без даты года и месяца.
На всякий случай)):
http://msdn.microsoft.com/ru-ru/library/system.data.sqldbtype.aspx
0
Башир
207 / 207 / 20
Регистрация: 18.05.2010
Сообщений: 846
11.03.2012, 12:09  [ТС] 7
вот источник из MSDN http://msdn.microsoft.com/en-us/library/bb675168.aspx если по нему то вроде все в норме

Добавлено через 3 минуты
ну так все правильно, но почему не работает то?
0
_katon_
384 / 240 / 19
Регистрация: 03.10.2011
Сообщений: 985
11.03.2012, 12:24 8
А какой тип данных используется в БД для поля? Если DateTime, то скорее всего он не примет Time (в таблице нужно сменить тип поля)!

Добавлено через 1 минуту
В принципе я так понял, что без разницы (по размеру) в каком виде хранить в int или time. Поэтому согласен timespan - удачное решение))
0
Башир
207 / 207 / 20
Регистрация: 18.05.2010
Сообщений: 846
11.03.2012, 15:22  [ТС] 9
я же ведь написал !!!!
Цитата Сообщение от Башир Посмотреть сообщение
CREATE TABLE t1(
id int NOT NULL identity PRIMARY KEY,
tm time NOT NULL)
go
CREATE proc p1
@id int output,
@tm time output
AS
INSERT INTO t1(tm) VALUES(@tm)
тип time. Конечно у меня не такая процедура и таблица но от этого суть не меняется, даже этот пример не работает, а в MSDN есть пример и он аналогичен этому но почему у меня не работает??? может дело в соединении?? возможно SqlConnection кривой??? потому что в нем много чего не работает.

Добавлено через 52 минуты
Вобщем то не пойму в чем дело, и где была ошибка, но все работает ))) похоже я где то лохонулся и теперь уже не помню ))) главное все работает
0
_katon_
384 / 240 / 19
Регистрация: 03.10.2011
Сообщений: 985
11.03.2012, 15:31 10
У меня вот так заработало:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
            SqlConnection cn = new SqlConnection("Data Source=Katon;Initial catalog=VLP_Main;Integrated Security=True");
            cn.Open();
 
            SqlCommand sqlCommand = new SqlCommand("p1", cn); 
            sqlCommand.CommandType = CommandType.StoredProcedure;
 
            sqlCommand.Parameters.Add(new SqlParameter());
            sqlCommand.Parameters[0].ParameterName = "@id";
            sqlCommand.Parameters[0].SqlDbType = SqlDbType.Int;
            sqlCommand.Parameters[0].Value = 1;
            sqlCommand.Parameters[0].Direction = ParameterDirection.InputOutput;
 
            sqlCommand.Parameters.Add(new SqlParameter());
            sqlCommand.Parameters[1].ParameterName = "@tm";
            sqlCommand.Parameters[1].SqlDbType = SqlDbType.Time;
            sqlCommand.Parameters[1].Value = TimeSpan.FromSeconds(5);
            sqlCommand.Parameters[1].Direction = ParameterDirection.InputOutput;
 
            sqlCommand.ExecuteNonQuery();
            cn.Close();
Добавлено через 5 минут
забыл открыть подключение))
0
11.03.2012, 15:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.03.2012, 15:31

Ругается на SqlDbType.VarChar
Работаю с локальной БД (VS 2010, FW 4). Ниже приведенный код работает, но если...

Не мог понять в чем ошибка в передаче данных по локальной сети
Реализовал программу для передачи сообщений по локальной сети(Интерфейс на...

Ошибка в передаче данный, клиент-сервер, пин-понг, теннис
Здравствуйте. Не могу понять, почему и где происходит ошибка. Косячит сама...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru