ASP Classic Application имеет проблемы с данными после обновления базы данных с Sybase 12.5 до 15 - PullRequest
0 голосов
/ 29 января 2019

В выходные мы перенесли наш экземпляр 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();
...