我用asp.net写了一个web程序,通过ODBC连接Oracle815数据库,会报错,格式如下:        Dim strconn As String = ConfigurationSettings.AppSettings("ODBC")
        Dim myconn As OdbcConnection = New OdbcConnection(strconn)
        Dim cmd As OdbcCommand = New OdbcCommand()        mzone = mainzone_list.SelectedItem.Value
        jxno = jjxno_list.SelectedItem.Value        myconn.Open()
        cmd.Connection = myconn
        cmd.CommandType = CommandType.StoredProcedure
        cmd.CommandTimeout = 7200        Dim pa As OdbcParameter, all_count As Integer = 0        pa = New OdbcParameter()
        pa = cmd.Parameters.Add("linecenter", OdbcType.VarChar)
        pa.Value = lid
        pa.Direction = ParameterDirection.Input        pa = New OdbcParameter()
        pa = cmd.Parameters.Add("mzone", OdbcType.VarChar)
        pa.Value = mzone
        pa.Direction = ParameterDirection.Input        pa = New OdbcParameter()
        pa = cmd.Parameters.Add("jxno", OdbcType.VarChar)
        pa.Value = jxno
        pa.Direction = ParameterDirection.Input        pa = New OdbcParameter()
        pa = cmd.Parameters.Add("rows", OdbcType.Int)
        pa.Direction = ParameterDirection.Output        cmd.CommandText = "{call LF2005_PKG.FILTER_BY_JJXNO(?,?,?,?)}" '调用过滤存储过程",?        Try
            cmd.ExecuteNonQuery()
            all_count = pa.Value        Catch exp As Exception
            msg.InnerText += exp.Message
        Finally
            cmd.Dispose()
        End Try....
总是报错“引用的对象为空...”请高手指点!

解决方案 »

  1.   

    all_count = pa.Value
    改为all_count = pa[3].Value
      

  2.   

    不是这个原因,断点跟踪,还没到这一步就报错了。另同样的语句,在oracle817没有问题。我自己机子上装的是oracle817,运行系统没问题;
    同事机子装的是oracle815,把我的web程序拷到他机子上就会报错;
    用我的程序访问他的数据库,运行系统没问题。奇怪!
      

  3.   

    嘿嘿,既然这样那应该是oracle自己的问题了
    怎么不用odac了?
      

  4.   

    我把数据库的连接方式改成oledb就可以了,奇怪!我用odbc这种方式在817上就可以,为什么在815上就不行了呢?请高手指点...
      

  5.   

    你的问题我也不知道,那就用oledb吧
      

  6.   

    请问用过odbc的,就我上面调用存储过程的代码格式有没有问题??我一直怀疑是传递参数的地方....
      

  7.   

    用.NET调用oracle的存储过程返回记录集http://dev.csdn.net/develop/article/21/21727.shtm
      

  8.   

    cmd.CommandType = CommandType.StoredProcedure cmd.CommandText = "{call LF2005_PKG.FILTER_BY_JJXNO(?,?,?,?)}" 这两句有冲突,第一句说的命令类型是存储过程,那么下面就只用用存储过程名称就可以了,可改为cmd.CommandText = "LF2005_PKG.FILTER_BY_JJXNO" 
    或者把第一句改为 cmd.CommandType = CommandType.commandtext,第二句不变oracle我不是很懂,大致情况应该如此