1

我有以下 ASP.NET 程序,它调用 Oracle 存储过程:

Dim objDBCon As New OracleConnection(strCon)
Try
    objDBCon.Open()
        Dim objDBCmd As New OracleCommand("Person.DeletePerson", objDBCon)
        objDBCmd.CommandType = CommandType.StoredProcedure

        Dim objParam As New OracleParameter
        objParam.ParameterName = "PersonID"
        objParam.OracleDbType = OracleDbType.Varchar2
        objParam.Direction = ParameterDirection.Input
        objParam.Value = PersonID
        objDBCmd.Parameters.Add(objParam)

        objParam = New OracleParameter
        objParam.ParameterName = "nReturn"
        objParam.OracleDbType = OracleDbType.Int64
        objParam.Direction = ParameterDirection.Output
        objDBCmd.Parameters.Add(objParam)

        objDBCmd.CommandTimeout = 30
        objDBCmd.ExecuteNonQuery()
        strResponse = objDBCmd.Parameters("nReturn").Value
Catch ex As Exception


Finally

'Cleanup code here

End Try

该代码在实时环境和我的旧开发 PC 上完美运行。但是,在我的新开发 PC 上,以下行引发异常:strResponse = objDBCmd.Parameters("nReturn").Value。异常是:“从OracleDecimal类型到String类型的转换无效。如果我将strResponse的数据类型更改为'Decimal',那么异常是:“从OracleDecimal类型到String类型的转换无效”。开发PC已安装以下内容:Windows 7、.NET Framework 3.5、Visual Studio 2008、Oracle.DataAccess 版本 10.2.0.100 和版本 2.112.1.0。我找不到有关此错误的任何信息。这是什么意思?

更新如果是因为我的新开发电脑是 64 位 Windows,我正在徘徊

4

1 回答 1

1

而不是设置:

objParam.OracleDbType = OracleDbType.Int64

尝试:

objParam.DbType = System.Data.DbType.Int64

此外,您可能需要更改:

strResponse = objDBCmd.Parameters("nReturn").Value

至:

strResponse = objDBCmd.Parameters("nReturn").Value.ToString()

或者:

strResponse = objDBCmd.Parameters("nReturn").ToString()
于 2012-05-16T22:21:51.887 回答