使用Oracle 11g,引用Oracle.DataAccess库。
在WCF中定义一个服务BureauService ,其有一个Insert接口,调试时,运行到“pParm[0] = new OracleParameter("BUREAUID", OracleDbType.Varchar2);”就报如下错:“Oracle.DataAccess.Client.OracleParameter”的类型初始值设定项引发异常。[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
  public class BureauService : IBureauService//服务的实现
  {
  //向数据库中加入一个单位信息
  //输入:name---单位名称
  public void Insert(string name)
  {
  OracleParameter[] pParm = new OracleParameter[3];
   
  pParm[0] = new OracleParameter("BUREAUID", OracleDbType.Varchar2);//单位的UUID
  pParm[0].Direction = ParameterDirection.Input;
  string uuid = System.Guid.NewGuid().ToString();
  pParm[0].Value = uuid;  pParm[1] = new OracleParameter("name", OracleDbType.Varchar2); //单位名称
  pParm[1].Direction = ParameterDirection.Input;
  pParm[1].Value = name;  pParm[2] = new OracleParameter("result", OracleDbType.Int16);//返回值
  pParm[2].Direction = ParameterDirection.ReturnValue;  CDatabaseUntil pDbUntil = new CDatabaseUntil();
  pDbUntil.ExecuteNonQuery("dog_insertTable.insertSingle_plan_bureau", CommandType.StoredProcedure, pParm);//将单位的基本数据传入到数据库中  int outValue = Convert.ToInt16(pParm[2].Value);
  if (outValue == 0) //上传失败
  return;
  }

解决方案 »

  1.   

    pParm[0] = new OracleParameter(":BUREAUID", OracleDbType.Varchar2)参数前加":"试试
      

  2.   


    OracleCommand com = new OracleCommand(sql, con);
            com.Parameters.Add(new OracleParameter(":id", OracleType.VarChar,20));
            com.Parameters[":id"].Value = id;
            com.Parameters.Add(new OracleParameter(":pwd", OracleType.VarChar, 20));
            com.Parameters[":pwd"].Value = pwd;
      

  3.   

    谢谢,前面加pParm[0] = new OracleParameter(":BUREAUID", OracleDbType.Varchar2)还是报错,VS2010的报错为:“Oracle.DataAccess.Client.OracleParameter”的类型初始值设定项引发异常”。我能不能使用类似:OracleParameter[] pParm = new OracleParameter[3];   
      pParm[0] = new OracleParameter("BUREAUID", OracleDbType.Varchar2);//单位的UUID
      pParm[0].Direction = ParameterDirection.Input;
      string uuid = System.Guid.NewGuid().ToString();
      pParm[0].Value = uuid;
    代码来产生参数表?
      

  4.   

     pParm[0] = new OracleParameter("BUREAUID", OracleType.VarChar);
      

  5.   

    pParm[0] = new OracleParameter("BUREAUID", OracleType.VarChar)
      

  6.   

    你确定错误是那个位置?
    那个位置的代码完全正确,因此不可能是代码问题,这个还需要实际环境调试才行,或者你的错误断点没有找对。TO 楼上,不存在OracleType.VarChar枚举。请注意楼主的前提“使用Oracle 11g,引用Oracle.DataAccess库。”
      

  7.   

    谢谢!是的,开发工具为VS2010,使用“WCF测试客户端”进行调试,当程序运行到“pParm[0] = new OracleParameter("BUREAUID", OracleDbType.Varchar2);”就报错。
      

  8.   

    我怀疑是不是那台机器上的Oracle.DataAccess库没装对,如果不是安装的11G的客户端,对应的Oracle.DataAccess库版本就不一样,如果根本没安装客户端,单独引用dll也是回出错的。