公共类:
Test.cs
/// <summary>
/// 执行存储过程
/// </summary>
/// <param name="procName">存储过程名称</param>
/// <param name="prams">存储过程所需参数</param>
/// <returns>返回存储过程返回值</returns>
public int RunProc(string procName, OleDbParameter[] prams) 
{
OleDbCommand cmd = CreateCommand(procName, prams);
cmd.ExecuteNonQuery();
this.Close();
return (int)cmd.Parameters["ReturnValue"].Value;
}
....... /// <summary>
/// 生成存储过程参数
/// </summary>
/// <param name="ParamName">存储过程名称</param>
/// <param name="DbType">参数类型</param>
/// <param name="Size">参数大小</param>
/// <param name="Direction">参数方向</param>
/// <param name="Value">参数值</param>
/// <returns>新的 parameter 对象</returns>
public OleDbParameter MakeParam(string ParamName, OleDbType DbType, Int32 Size, ParameterDirection Direction, object Value) 
{
OleDbParameter param; if(Size > 0)
param = new OleDbParameter(ParamName, DbType, Size);
else
param = new OleDbParameter(ParamName, DbType); param.Direction = Direction;
if (!(Direction == ParameterDirection.Output && Value == null))
param.Value = Value; return param;
}
       .......
       .......
/// <summary>
/// 传入输入参数
/// </summary>
/// <param name="ParamName">存储过程名称</param>
/// <param name="DbType">参数类型</param></param>
/// <param name="Size">参数大小</param>
/// <param name="Value">参数值</param>
/// <returns>新的 parameter 对象</returns>
public OleDbParameter MakeInParam(string ParamName, OleDbType DbType, int Size, object Value) 
{
return MakeParam(ParamName, DbType, Size, ParameterDirection.Input, Value);
} ........
........
/// <summary>
/// 生成存储过程参数
/// </summary>
/// <param name="ParamName">存储过程名称</param>
/// <param name="DbType">参数类型</param>
/// <param name="Size">参数大小</param>
/// <param name="Direction">参数方向</param>
/// <param name="Value">参数值</param>
/// <returns>新的 parameter 对象</returns>
public OleDbParameter MakeParam(string ParamName, OleDbType DbType, Int32 Size, ParameterDirection Direction, object Value) 
{
OleDbParameter param; if(Size > 0)
param = new OleDbParameter(ParamName, DbType, Size);
else
param = new OleDbParameter(ParamName, DbType); param.Direction = Direction;
if (!(Direction == ParameterDirection.Output && Value == null))
param.Value = Value; return param;
}Ym1.aspx
Ym1.aspx.cs
private void Button1_Click(object sender, System.EventArgs e)
{
string strbh=this.TxtBh.Text.Trim();
string strname=this.TxtName.Text.Trim();
string strjob=this.TxtJob.Text.Trim();

  }; OleDbParameter[] parameter = {
  data1.MakeInParam("NumZZZ001",OleDbType.VarChar,2,strbh.ToString()),
  data1.MakeInParam("NumZZZ002",OleDbType.VarChar,3,strname.ToString()),
  data1.MakeInParam("NumZZZ003",OleDbType.VarChar,6,strjob.ToString()) 
  
  };

try 
{
data1.RunProc("PRC_ZZ01",parameter);   //运行到这里出错了啊

}
catch(Exception Err)
{
Response.Write(Err);

}
finally
{
data1    = null;
} }

解决方案 »

  1.   

    我用的ORACLE8I+ VS2003 C#,各位大师帮我看看,我急死了
      

  2.   

    没用过ORACLE8I,根据SQL经验试下,"PRC_ZZ01"和你存储过程里声明的变量名一样不?
    SQL里是要加@
      

  3.   

    存储过程如下:
    CREATE OR REPLACE PROCEDURE PRC_ZZ01
    (
      /*
      配置表口径
      */
    NumZZZ001 varchar2,
    NumZZZ002 varchar2,
    NumZZZ003 varchar2
     )
    AS
    Begin
      INSERT INTO ZZ01 VALUES(NumZZZ001,NumZZZ002,NumZZZ003);
    commit;End PRC_ZZ01;
      

  4.   

    OleDbCommand cmd = CreateCommand(procName, prams);里CreateCommand是什么玩意?
      

  5.   

    net编程时有时会遇到莫名其妙的ora-01036错误。具体原因一般分析如下:
    1、如错误介绍一样,你传入的参数和你语句中参数的顺序不同,或者树木不一致。
    2、名字过长,oracle要求列名<32字符(起这么长名字的人也够变态的)
    3、在声明中 new OracleParameter(PARM_NAME........)  其中PARM_NAME中不需要包含语句中的":"(补充一下,包含一般也不会有错误)以上就是一般情况的分析,还有几种特殊的情况:比如数据类型的问题,比如你小子没事干在后面多加了一个空格
      

  6.   

    if  (!(Direction  ==  ParameterDirection.Output  &&  Value  ==  null))  
                                                   param.Value  =  Value;  
     
                                       return  param;  
    自己解决了,谢谢大家的帮助