各位大师救命啊 !!!!System.Data.OleDb.OleDbException: ORA-01036: 非法的变量名/编号
公共类:
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;
}
}
[解决办法]
OleDbCommand cmd = CreateCommand(procName, prams);里CreateCommand是什么玩意?
[解决办法]
net编程时有时会遇到莫名其妙的ora-01036错误。具体原因一般分析如下:
1、如错误介绍一样,你传入的参数和你语句中参数的顺序不同,或者树木不一致。
2、名字过长,oracle要求列名 <32字符(起这么长名字的人也够变态的)
3、在声明中 new OracleParameter(PARM_NAME........) 其中PARM_NAME中不需要包含语句中的 ": "(补充一下,包含一般也不会有错误)
以上就是一般情况的分析,还有几种特殊的情况:
比如数据类型的问题,比如你小子没事干在后面多加了一个空格