存储过程的定义部分如下:
create or replace function fun_T_mete_realtime_ave(sta in number,
col_name in varchar2,date_now in varchar2) return number is
  Result_ave number;
  temp_var varchar2 (1000);
begin
.
.
.
end fun_T_mete_realtime_ave;vb.net调用语句(数据库已经连接):
Dim Cmd1 As New System.Data.OleDb.OleDbCommand
Cmd1.CommandType = CommandType.StoredProcedure
Cmd1.CommandText = "fun_T_mete_realtime_ave"
Cmd1.Parameters.Add("sta", OleDb.OleDbType.Integer).Value = CInt(station(b))
Cmd1.Parameters.Add("col_name", OleDb.OleDbType.VarChar, 200).Value = "V10004"                         Cmd1.Parameters.Add("date_now", OleDb.OleDbType.VarChar).Value = ndate.ToString  '日期
Cmd1.Parameters.Add("Result_ave", OleDb.OleDbType.Double)
Cmd1.Parameters("Result_ave").Direction = ParameterDirection.ReturnValue
Cmd1.Connection = con
Cmd1.ExecuteNonQuery()
MsgBox(Cmd1.Parameters("Result_ave").Value)执行到Cmd1.ExecuteNonQuery(),错误是参数个数或类型错误,
我是3个输入,一个输出。谁能告诉我参数怎么传错了?

解决方案 »

  1.   

    刚才不知道动了什么,错误没有了,但是这句
    MsgBox(Cmd1.Parameters("Result_ave").Value) 
    什么也没有显示出来,请问怎么显示我的结果,是我这么写不对吗?
      

  2.   

    http://www.ondotnet.com/pub/a/dotnet/2002/12/16/multiresultsets_1202.html?page=2
      

  3.   

    你调用的是函数啊,也不是存储过程啊,你直接这样写 
    dim sta as string
    dim col_name as string
    dim date_now as string
    然后执行下面的语句
    "select fun_T_mete_realtime_ave('"+sta+"', '"+col_name+"','"+date_now+"') from dual"
      

  4.   

    我这里没有vb.net的环境Cmd1.CommandType = CommandType.CommandText '不知道是不是这个
    Cmd1.CommandText = "select fun_T_mete_realtime_ave('"+sta+"', '"+col_name+"','"+date_now+"') from dual" '这里应该是这个 
      

  5.   

    我说错了,我调用的就是函数啊,怎么老是说参数错呢?
    你说的是直接执行select,但是我函数已经写好并且编译了,现在要调用函数啊
    再说sta是number型的
      

  6.   

    CStr(sta)不知道是不是这个函数了,或者是sta.ToString()
    "select fun_T_mete_realtime_ave('+CStr(sta)+', '"+col_name+"','"+date_now+"') from dual"函数就是这样使用的
      

  7.   

    sta在函数里面是number型的,我传进去的是整数型int,应该没错啊
    怎么会是tostring呢
      

  8.   

    我现在要给函数传参数,并不是要直接在程序里面执行select语句
      

  9.   

    谁能给解答一下啊,存储过程或函数里面的参数类型 和在传入的参数类型是什么对应的?
    vb.net里面定义的integer类型可以传给存储函数里的number类型吗?
      

  10.   

    你自己调试吧,我也调试不了--输入参数类似
    cmdCommand.Parameters.Add(New OleDb.OleDbParameter("sta", OleDb.OleDbType.VarNumeric, 10, ParameterDirection.Input, False, 0, 0, "", DataRowVersion.Current, 111111))
    --输出参数类似
    Dim myParam = New OleDb.OleDbParameter("xxx", OleDb.OleDbType.VarNumeric, 0)
    myParam.Direction = ParameterDirection.Output
    cmdCommand.Parameters.Add(myParam)
    http://www.dotnetspider.com/qa/Question8532.aspx
      

  11.   

    这是连接字符串,应该是没有问题的 
    With con 
              .ConnectionString = "Provider=OraOLEDB.Oracle;Password=a;User ID=a;Data Source=pname;Persist   Security   Info=false;" 
               .Open() 
    End With 发现OleDb.OleDbType类型中并不完全和oracle类型吻合。比如没有number类型,所以我只好选择了Integer 
    不知道是不是因为这个导致类型不一致?我该怎么解决啊?