首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

各位大师 !System.Data.OleDb.OleDbException: ORA-01036: 非法的变量名/编号

2012-02-24 
各位大师救命啊 !!!!System.Data.OleDb.OleDbException: ORA-01036: 非法的变量名/编号公共类:Test.cs///

各位大师救命啊 !!!!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中不需要包含语句中的 ": "(补充一下,包含一般也不会有错误)

以上就是一般情况的分析,还有几种特殊的情况:

比如数据类型的问题,比如你小子没事干在后面多加了一个空格

热点排行