数据库从Sybase 12.5升级到15后,ASP Classic Application出现数据问题

时间:2019-01-29 14:07:49

标签: asp.net oledb sybase-ase sybase-ase15

在周末,我们将Sybase ASE 12.5实例迁移到15实例。连接到Sybase数据库的经典ASP应用程序通常可以正常工作,只有一页。在该页面上,当调用其中一种向数据库发送请求的方法时(返回多个字段,一些字符串,一些int和两个日期),返回时它将失败,并显示以下错误“由于DateTime,转换失败数据值溢出为使用者的缓冲区中的DataTime值部分指定的类型。我们将存储的proc更改为不返回两个日期字段,现在返回了,但是它返回到前端的数据对于该存储的proc是无效数据。我们有一个错误的字符串(应该返回“ D”并返回“ A”),应该填充但为空的字符串,并且应该为1的int返回一些疯狂的long int。当尝试连接到15而不是12.5时,我们走的是前端服务器的驱动程序问题,但是无法安静地确定这是否是问题。我们尝试将连接字符串从使用Sybase.ASEOLEDBProvider.2更改为ASEOLEDB,这在尝试建立连接时导致错误。

该连接是OleDb连接

在我们更改存储的proc之前,尝试执行“ 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();

0 个答案:

没有答案