0

上周末,我们将 Sybase ASE 12.5 实例迁移到 15 实例。连接到 Sybase 数据库的经典 ASP 应用程序大部分工作正常,但只有一个页面。在该页面上,当调用向数据库发送请求的方法之一(返回多个字段、一些字符串、一些整数和两个日期)时,返回失败并出现以下错误“转换失败,因为 DateTime数据值溢出了为消费者缓冲区中的 DataTime 值部分指定的类型”。我们将存储过程更改为不返回两个日期字段,现在它返回了,但它返回到前端的数据对于存储过程来说是无效数据。我们有一个错误的字符串(应该返回“D”并返回“A”)一个应该填充但为空的字符串,和一个应该是 1 的 int 返回一些疯狂的 long 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();
4

0 回答 0