你先在sql/pl里面看看你过程能不能得到你的值
然后调用,这样一般不会出错的。

解决方案 »

  1.   

    没人帮我,自已UP
    存储过程在sql/pl  Out出来的值是正确的
    在上述的函数中,
    Dim P_reader As OleDbDataReader = CmdRd.ExecuteReader(CommandBehavior.CloseConnection)  --这应该没错吧
    为什么一直not reader.read()??哭
      

  2.   

    Public Function Sys_ProcCommandReturn(ByVal ProceName As String, ByVal ParaString As String)
          '存储过程返回值
          Dim ConnVw As OleDbConnection
          Dim CmdRd As OleDbCommand
          Dim CmdVw, Dadt As OleDbDataAdapter
          Dim Ds As DataSet
          Dim ConnStr As String = "Provider=MSDAORA.1;Persist Security Info=False;Password=dowell98168;User ID=dw_transuser;"
          Dim index As String      Dim Fi_i, Fi_Length As Integer
          Dim F_CmdParaName
          Dim F_TmpString, Fs_Name, Fs_Type, Fs_value As String
          Dim ConnRd As OleDbConnection = New OleDbConnection(ConnStr)
          CmdRd = New OleDbCommand(ProceName, ConnRd)
          CmdRd.CommandType = CommandType.StoredProcedure
          Dim fs_temp, fs_style, fs_temp2, f_dbtype
          If ParaString <> "" Then
             fs_temp = Split(ParaString, "$")
             For Fi_i = 0 To UBound(fs_temp)
                fs_temp2 = Split(fs_temp(Fi_i), "*")
                Fs_Name = fs_temp2(0)
                Fs_Type = fs_temp2(1)
                Fi_Length = fs_temp2(2)
                Fs_value = fs_temp2(3)
                fs_style = fs_temp2(4)
                Response.Write(fs_style & "**<BR>")
                Select Case UCase(Fs_Type)    '目前先列举以下两种
                   Case "CHAR"
                      Fs_Type = OleDbType.VarChar
                      f_dbtype = OleDbType.VarChar
                   Case "INT"
                      Fs_Type = OleDbType.Integer
                      f_dbtype = OleDbType.Integer
                   Case "NUM"
                      Fs_Type = OleDbType.Numeric
                      f_dbtype = OleDbType.Numeric
                   Case "D"
                      Fs_Type = OleDbType.Date
                      f_dbtype = OleDbType.Date
                End Select
                F_CmdParaName = CmdRd.Parameters.Add(Fs_Name, f_dbtype, Fi_Length)
                Select Case fs_style
                   Case "RETURN_VALUE"
                      F_CmdParaName.Direction = ParameterDirection.ReturnValue
                   Case "@InputParm"
                      F_CmdParaName.value = Fs_value
                   Case "@OutputParm"
                      F_CmdParaName.Direction = ParameterDirection.Output
                End Select
                'Response.Write(Fi_i.ToString & "<BR>")
             Next
          End If
          ConnRd.Open()
          Dim P_reader As OleDbDataReader = CmdRd.ExecuteReader(CommandBehavior.CloseConnection)
          Response.Write(CmdRd.Parameters("adb_CreditFee3").Value & "@@@")
          Response.Write(CmdRd.Parameters.Item(2).Value) '("ADB_CREDITFEE2").Value.ToString & "***")
          If P_reader.Read() Then
             Response.Write(P_reader.Item(0) & "***")
          Else
             Response.Write("<BR>ddddddddddddddddd")
          End If
          'P_reader.Close()
          'return(CmdRd.ExecuteReader())
          CmdRd.Dispose()
          ConnRd.Close()
          ConnRd.Dispose()
       End Function
    过程:
    Create or Replace Procedure sp_temp
    (
    as_feename in char,
    adb_name out char
    )
    is
    Begin
    adb_name := as_Feename;
    End;
    /
       
    调用--
    dim Ps_sql = "as_feename*char*30*wwwww@InputParm" + "$adb_name*char*30*0*@OutputParm"
       P_reader = Sys_ProcCommandReturn("sp_GetGeneralFeePrice", Ps_sql) 
    此时,我希望得到的是adb_name的值, 请大家帮我看看
      

  3.   

    此时,我希望得到的是adb_name的值, 请大家帮我看看,可是reader的状态一直是not read()
    ,我该如何改呢?
      

  4.   

    你应该把out作为参数传到存储过程
    给你段代码,C#的
    public System.Object TransferStoredPrucedure(Parameters[] parameter,string StoreName)
    {
    string outname="";
    System.Data.OleDb.OleDbConnection cn=new OleDbConnection(connStr);
    cn.Open();
    System.Data.OleDb.OleDbCommand cm=new System.Data.OleDb.OleDbCommand();
    cm.CommandText=StoreName;
    cm.Connection=cn;
    cm.CommandType=System.Data.CommandType.StoredProcedure;
    System.Data.OleDb.OleDbParameterCollection oleParam=cm.Parameters;
    foreach(Parameters pa in parameter)
    {
    System.Data.OleDb.OleDbParameter param=new System.Data.OleDb.OleDbParameter();
    param.Value=pa.Value;
    if(pa.ParameterDirection==System.Data.ParameterDirection.Output)
    {
    outname=pa.ParameterName;
    }
    param.Direction=pa.ParameterDirection;
    param.OleDbType=pa.DbType;
    try
    {
    param.Size=pa.Size;
    }
    catch
    { }
    finally{}
    param.ParameterName=pa.ParameterName;
    oleParam.Add(param);
    }
    System.Data.OleDb.OleDbDataReader reader;
    try
    {

    reader=cm.ExecuteReader();
    reader.Close();
    }
    catch(Exception ex)
    {}
    finally
    {
    if(cn.State!=System.Data.ConnectionState.Closed)
    {
    cn.Close();
    }
    }

    if(outname=="")
    {
    return "true";
    }
    else
    {
    return cm.Parameters[outname].Value;
    }
    }[System.Serializable]public class Parameters
    {
    public string ParameterName="";
    public System.Data.OleDb.OleDbType DbType;
    public System.Object Value;
    public int Size;
    public System.Data.ParameterDirection ParameterDirection;
    }