public bool InsertFuncInfo(string FuncName,string FuncDescription)
{
OracleConnection myConnection = new OracleConnection(ConfigurationSettings.AppSettings["ConnectionString"]);

string sql = "insert into sysFuncDic(FuncName,Description) values(@FuncName,@FuncDescription)";

OracleCommand myCommand = new OracleCommand(sql, myConnection); myCommand.CommandType = CommandType.Text; OracleParameter parameterFuncName = new OracleParameter("@Funcname", OracleType.NVarChar, 50);
parameterFuncName.Value = FuncName;
myCommand.Parameters.Add(parameterFuncName); OracleParameter parameterFuncDescription = new OracleParameter("@Funcdescription", OracleType.NVarChar, 100);
parameterFuncDescription.Value = FuncDescription;
myCommand.Parameters.Add(parameterFuncDescription); myConnection.Open();
int result = myCommand.ExecuteNonQuery();
myConnection.Close();
if(result>0)
{
return true;
}
else
{
return false;
}
}
执行此函数时,程序报错:
ORA-01036: 非法的变量名/编号?
行 60:  myConnection.Open();
行 61:  int result = myCommand.ExecuteNonQuery();   (此行错误)
行 62:  myConnection.Close();
行 63:  if(result>0)[OracleException: ORA-01036: 非法的变量名/编号
]
   System.Data.OracleClient.OracleConnection.CheckError(OciHandle errorHandle, Int32 rc)
   System.Data.OracleClient.OracleParameterBinding.Bind(OciHandle statementHandle, NativeBuffer parameterBuffer, OracleConnection connection)
   System.Data.OracleClient.OracleCommand.Execute(OciHandle statementHandle, CommandBehavior behavior, Boolean isReader, Boolean needRowid, OciHandle& rowidDescriptor, ArrayList& refCursorParameterOrdinals)
   System.Data.OracleClient.OracleCommand.Execute(OciHandle statementHandle, CommandBehavior behavior, Boolean needRowid, OciHandle& rowidDescriptor)
   System.Data.OracleClient.OracleCommand.ExecuteNonQueryInternal(Boolean needRowid, OciHandle& rowidDescriptor)
   System.Data.OracleClient.OracleCommand.ExecuteNonQuery()
   hbjwxt.DA.AdminDB.InsertFuncInfo(String FuncName, String FuncDescription) in e:\hbjwxt\da\syssecurity\admindb.cs:61
   webs.sysSecurity.Moduleadmin.AddFuncBtn_Click(Object sender, EventArgs e) in e:\hbjwxt\webs\syssecurity\moduleadmin.aspx.cs:114
   System.Web.UI.WebControls.LinkButton.OnClick(EventArgs e)
   System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
   System.Web.UI.Page.ProcessRequestMain()这是什么原因啊?我的数据库表名sysFuncDic ;字段 FuncName [NVarchar2](50)  ;Description[NVarchar2](100)在线等,请大侠们帮忙了!!!

解决方案 »

  1.   

    行 61:  int result = myCommand.ExecuteNonQuery();   (此行错误)myCommand.ExecuteNonQuery()并不会返回 int 类型的一般都是DataReader 之类的
      

  2.   

    OracleDataReader  result = myCommand.ExecuteNonQuery();

    while(result.read())
    {
    return true;
    }
    else
    {
    return false;
    }
    myConnection.Close();
      

  3.   

    将 OracleType.NVarChar 改为 OracleType.VarChar 试试呢
      

  4.   

    楼上的大侠,您说的这种方式我试过了,还是不行,报错
    OracleDataReader  result = myCommand.ExecuteNonQuery();
    无法将类型“int”隐式转换为“System.Data.OracleClient.OracleDataReader”
      

  5.   

    result = Convert.ToInt32(myCommand.ExecuteNonQuery());ExecuteNonQuery返回的int
      

  6.   

    应该是SQL语句错误吧,可以试下以下的步骤1不会是数据库对大小写敏感的吧?
    2、变量名不要取得和字段名相同(把两个变量名换一个 如@aa,@bb)
    3、Description 在有些系统里好像是关键字 试着换成 [Description](不知道oracle是不是这样写的),或是换个字段名祝好运
      

  7.   

    string sql = "insert into sysFuncDic(FuncName,Description) values(@FuncName,@FuncDescription)";Oracle 的SQL 语句中变量前缀不对,这个是Sql Server 的用法。
    应该是
    string sql = "insert into sysFuncDic(FuncName,Description) values(:FuncName,:FuncDescription)";参数定义:
    OracleParameter parameterFuncName = new OracleParameter("Funcname", OracleType.NVarChar, 50);