В выходные мы перенесли наш экземпляр Sybase ASE 12.5 на 15 экземпляров.Классическое приложение ASP, подключенное к базе данных Sybase, в основном работает правильно, за исключением одной страницы.На той странице, когда вызывается один из методов, который отправляет запрос в базу данных (возвращает несколько полей, несколько строк, несколько целых и две даты), при возврате происходит сбой со следующей ошибкой «Преобразование не выполнено из-за DateTimeзначение данных переполнило тип, указанный для части значения DataTime в буфере потребителя ".Мы изменили сохраненный процесс, чтобы он не возвращал два поля даты, и теперь он возвращается, но данные, которые он возвращает внешнему интерфейсу, являются недействительными данными для сохраненного процесса.У нас есть строка, которая является неправильной (должна возвращать «D» и возвращает «A»). Строка, которая должна быть заполнена, но имеет значение null, и int, равное 1, возвращают некоторое сумасшедшее длинное int.Мы пошли по пути возможного возникновения проблемы с драйвером на сервере переднего плана при попытке подключиться к 15 вместо 12,5, но не можем выяснить, если это проблема.Мы попытались изменить строку подключения с использования Sybase.ASEOLEDBProvider.2 на ASEOLEDB, и это привело к ошибкам при попытке установить соединение.
Соединение является соединением OleDb
Перед тем, как мы изменили сохраненный процесс, произошел сбой при попытке выполнить "ExecuteNonQuery"
Мы проверили значения, поступающие в базу данных(даже вытащил в журналы, чтобы убедиться, что он был передан SP), и это все правильно, и запуск SP вручную возвращает ожидаемые результаты.
Это проблема с драйвером?Или разница в типах данных?
Это код приложения
OleDbConnection planningconnection = new OleDbConnection(_planningconnectionString);
planningconnection.Open();
OleDbCommand command = new OleDbCommand("dbo.tour_last_arrive_home", planningconnection);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add("@start_datetime", OleDbType.DBTimeStamp);
command.Parameters["@start_datetime"].Value = dNextAvailable;
command.Parameters.Add("@tour_no", OleDbType.Integer);
command.Parameters["@tour_no"].Value = DplingOldRun;
command.Parameters.Add("@operator_code", OleDbType.Char, 1);
command.Parameters["@operator_code"].Value = DplingOldJob;
// Stored Procedure Output
command.Parameters.Add("@parmoutSchedNbr", OleDbType.Integer);
command.Parameters["@parmoutSchedNbr"].Direction = ParameterDirection.Output;
command.Parameters.Add("@parmoutSection", OleDbType.Integer);
command.Parameters["@parmoutSection"].Direction = ParameterDirection.Output;
command.Parameters.Add("@parmoutJob", OleDbType.Char, 1);
command.Parameters["@parmoutJob"].Direction = ParameterDirection.Output;
command.Parameters.Add("@parmoutArriveCity", OleDbType.Char, 28);
command.Parameters["@parmoutArriveCity"].Direction = ParameterDirection.Output;
command.Parameters.Add("@parmoutArriveDatetime", OleDbType.DBTimeStamp);
command.Parameters["@parmoutArriveDatetime"].Direction = ParameterDirection.Output;
command.Parameters.Add("@parmoutSignOff", OleDbType.DBTimeStamp);
command.Parameters["@parmoutSignOff"].Direction = ParameterDirection.Output;
command.ExecuteNonQuery();