Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Вызов хранимой процедуры, проблема с передачей даты

5
31 октября 2007 года
hardcase
4.5K / / 09.08.2005
Вызываю на SqlServer 2005 следующую хранимую процедуру (сигнатура):
Код:
ALTER PROCEDURE dbo.ovpn_AddCurrentSession
    (
    @userName nvarchar(50),
    @realAddress varchar(30),
    @virtualAddress varchar(30),
    @sessionStartTime datetime,
    @bytesRecieved bigint,
    @bytesSent bigint
    )
AS
...

На C# вызываю следующим образом:
Код:
private static void AddCurrentSessionProc(SqlConnection con, SqlTransaction tran, SessionInfo session) {
    using (SqlCommand cmd = new SqlCommand()) {
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.CommandText = "ovpn_AddCurrentSession";
        cmd.Connection = con;
        cmd.Transaction = tran;
        cmd.Parameters.Add("@userName", SqlDbType.NVarChar).Value = session.UserName;
        cmd.Parameters.Add("@realAddress", SqlDbType.VarChar).Value = session.RealAddress;
        cmd.Parameters.Add("@virtualAddress", SqlDbType.VarChar).Value = session.VirtualAddress;
        cmd.Parameters.Add("@sessionStartTime", SqlDbType.DateTime).Value = session.SessionStartTime;
        cmd.Parameters.Add("@bytesRecieved", SqlDbType.BigInt).Value = session.BytesRecieved;
        cmd.Parameters.Add("@bytesSent", SqlDbType.BigInt).Value = session.BytesSent;

        cmd.ExecuteNonQuery();
    }
}

При вызове получаю SqlException, сообщающее о том, что дата имеет неверный формат:
Цитата:

{"Conversion failed when converting datetime from character string."}


Пробовал назначить Thread-у инвариантную культуру - всеравно ругается.

З.Ы. параметр session хранит корректные значения.

713
01 ноября 2007 года
Ap0k
360 / / 13.03.2006
Какой тип у SessionInfo.SessionStartTime? Случаем не закралось ли там Nullable<DateTime> вместо DateTime?
5
01 ноября 2007 года
hardcase
4.5K / / 09.08.2005
Нет, весь код пишу руками, потому такой баг бы заметил (никакого ADO.NET - мне так проще и быстрее). Nullable<T> по-возможности избегаю.
 
Код:
public sealed class SessionInfo {
...
        private DateTime sessionStartTime;
        public DateTime SessionStartTime {
            get { return sessionStartTime; }
        }
...
}

Вообще все члены SessionInfo четко определены - никаких null-ов, везде реальные корректные значения.


Еще пробовал передавать серверу SET LANGUAGE с текущим языком из CultureInfo.CurrentCulture - не помогает...
5
01 ноября 2007 года
hardcase
4.5K / / 09.08.2005
А ларчик просто открывался.

Посмотрел я SQL-код хранимой процедуры (ну, прошелся пошагово тоже) и заметил такое вот несоответствие:
 
Код:
INSERT INTO ovpn_CurrentSessions (UserName, [COLOR="Red"]SessionStartTime[/COLOR], [COLOR="Red"]RealAddress[/COLOR], VirtualAddress, BytesRecieved, BytesSent, SessionActive)
VALUES (@userName, [COLOR="Red"]@realAddress[/COLOR], [COLOR="Red"]@sessionStartTime[/COLOR], @virtualAddress, @bytesRecieved, @bytesSent, 1)


Вот и ругал меня SQL-сервер не за вызов хранимки, а за кривость в INSERT-е. Эх, невнимательность.
713
02 ноября 2007 года
Ap0k
360 / / 13.03.2006
Цитата: hardcase
Нет, весь код пишу руками, потому такой баг бы заметил (никакого ADO.NET - мне так проще и быстрее). Nullable<T> по-возможности избегаю...


Позволю себе вас поправить :-) ADO.NET как раз таки используется, и нарекания в его сторону вряд ли найдутся, а вот что касается его части связанной с DataSet и глубже - согласен, штука сильно мешает, когда размер системы вырастает за границы нескольких справочников... никакого представления о целостностях :-( . Исходя из этого - O/RM, который вы благополучно используете.

Цитата: hardcase
А ларчик просто открывался...


На вашем месте, в таких случаях хочется убиться :D .

5
03 ноября 2007 года
hardcase
4.5K / / 09.08.2005
Цитата: Ap0k
На вашем месте, в таких случаях хочется убиться :D .


Истину говоришь :D

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог