CF_GET_DATE应该是个过程吧,应该是输入值和返回值.
这里我写了一个执行过程的过程.你可以参考一下,C#的.private OleDbCommand cmd=new OleDbCommand();public int Execute_proc_user(string flag,int p_user_id,string p_login_name,string p_password,string p_name,int p_power_id,string p_power_name,string p_telephone,string p_email,string proc_name)
{
cmd.Parameters.Clear();
cmd.Dispose();
int ii;
string p_flag=flag;
cmd.CommandText=proc_name;
cmd.CommandType=CommandType.StoredProcedure;
cmd.Connection=new  clsPublic().ConnectDB(); cmd.Parameters.Add("p_flag",OleDbType.VarChar);
cmd.Parameters.Add("p_user_id",OleDbType.Integer);
cmd.Parameters.Add("p_login_name",OleDbType.VarChar);
cmd.Parameters.Add("p_password",OleDbType.VarChar);
cmd.Parameters.Add("p_name",OleDbType.VarChar);
cmd.Parameters.Add("p_power_id",OleDbType.VarChar);
cmd.Parameters.Add("p_power_name",OleDbType.VarChar);
cmd.Parameters.Add("p_telephone",OleDbType.VarChar);
cmd.Parameters.Add("p_email",OleDbType.VarChar);
cmd.Parameters.Add("p_out",OleDbType.Integer);
cmd.Parameters["p_flag"].Value=p_flag;
cmd.Parameters["p_user_id"].Value=p_user_id;
cmd.Parameters["p_login_name"].Value=p_login_name;
cmd.Parameters["p_password"].Value=p_password;
cmd.Parameters["p_name"].Value=p_name;
cmd.Parameters["p_power_id"].Value=p_power_id;
cmd.Parameters["p_power_name"].Value=p_power_name;
cmd.Parameters["p_telephone"].Value=p_telephone;
cmd.Parameters["p_email"].Value=p_email; cmd.Parameters["p_flag"].Direction=ParameterDirection.Input;
cmd.Parameters["p_user_id"].Direction=ParameterDirection.Input;
cmd.Parameters["p_login_name"].Direction=ParameterDirection.Input;
cmd.Parameters["p_password"].Direction=ParameterDirection.Input;
cmd.Parameters["p_name"].Direction=ParameterDirection.Input;
cmd.Parameters["p_power_id"].Direction=ParameterDirection.Input;
cmd.Parameters["p_power_name"].Direction=ParameterDirection.Input;
cmd.Parameters["p_telephone"].Direction=ParameterDirection.Input;
cmd.Parameters["p_email"].Direction=ParameterDirection.Input;          cmd.Parameters["p_out"].Direction=ParameterDirection.ReturnValue;
try
{
cmd.ExecuteNonQuery();
ii=(int)cmd.Parameters["p_out"].Value;
}
catch
{
ii= -3;
}
finally
{
if (cmd.Connection.State==ConnectionState.Open)
{
cmd.Connection.Close();
cmd.Dispose();
}
}
return ii;
}

解决方案 »

  1.   

    传进去的时候VB端是有值的,但到了ORACLE值就没了,而且在FUNCTION会这样, 但是PROCEDURE就不会了
      

  2.   

    oraDate.CommandType = CommandType.StoredProcedure    <------这里是过程,                With oraDate
                        .Parameters.Add(New OracleParameter("pi_ymd", OracleDbType.Int32, ParameterDirection.Input)).Value = 200401
                        .Parameters.Add("pi_add", OracleDbType.Int32, ParameterDirection.Input).Value = 8
                        .Parameters.Add("po_st_ymd", OracleDbType.Int32, ParameterDirection.Output)   <----------这个参数干什么用?
                        .Parameters.Add("po_ed_ymd", OracleDbType.Int32, ParameterDirection.Output)  <--------这个参数干什么?
                        .Parameters.Add(New OracleParameter("NM_RET_O", OracleDbType.Int32, ParameterDirection.ReturnValue)) <------这里有个返回值是可以
                        oraDate.ExecuteNonQuery()
    --执行外了以后改有个参数来接收返回值
      

  3.   

    po_st_ymd是涵数的一个返回值, 也就是传输方式为OUT 的参数