CREATE OR REPLACE Procedure p_insert_tb_vulgatecar
(
plateid in Nvarchar2,
platetype in Nvarchar2,
crossingname in Nvarchar2,
crossingtime in Nvarchar2,
wayname in Nvarchar2,
aspectname in Nvarchar2,
processstate in Nvarchar2,
platecolor in Nvarchar2,
speed in Nvarchar2,
illegaltype in Nvarchar2,
checktime in Nvarchar2,
punishpoint in Nvarchar2,
punishcash in Nvarchar2,
blackstate in Number,
filepath in Nvarchar2
)
as
BEGIN
insert into sysadmin.tb_vulgatecar values (VuIdentity.nextval,plateid,platetype,crossingname,to_date(crossingtime,'YYYY-MM-DD HH24:MI:SS'),wayname,aspectname,processstate,platecolor,speed,illegaltype,to_date(checktime,'YYYY-MM-DD HH24:MI:SS'),punishpoint,punishcash,blackstate,filepath);
commit;
End;
我在oracle创建了一个添加数据的存储过程,在VS里调用public static void RunProcedure(string ProName, OracleParameter[] op)
{
     OracleCommand cmd = new OracleCommand(ProName,Conn);
     cmd.CommandText = ProName;
     cmd.CommandType = CommandType.StoredProcedure;
     foreach (OracleParameter param in op)
     {
         cmd.Parameters.Add(param);
     }
     cmd.ExecuteNonQuery();
}
public static void AddProcedure(string plateid, string platetype, string crossingname, string crossingtime, string wayname, string aspectname, string processstate, string platecolor, string speed, string illegaltype, string checktime, string punishpoint, string punishcash, string blackstate, string filepath)
        {
            OracleParameter[] op = new OracleParameter[]{
                new OracleParameter("plateid",OracleType.NVarChar),
                new OracleParameter("platetype",OracleType.NVarChar),
                new OracleParameter("crossingname",OracleType.NVarChar),
                new OracleParameter("crossingtime",OracleType.NVarChar),
                new OracleParameter("wayname",OracleType.NVarChar),
                new OracleParameter("aspectname",OracleType.NVarChar),
                new OracleParameter("processstate",OracleType.NVarChar),
                new OracleParameter("platecolor",OracleType.NVarChar),
                new OracleParameter("speed",OracleType.NVarChar),
                new OracleParameter("illegaltype",OracleType.NVarChar),
                new OracleParameter("checktime",OracleType.NVarChar),
                new OracleParameter("punishpoint",OracleType.NVarChar),
                new OracleParameter("punishcash",OracleType.NVarChar),
                new OracleParameter("blackstate",OracleType.Number),
                new OracleParameter("filepath",OracleType.NVarChar)
            };
            op[0].Value = plateid;
            op[1].Value = platetype;
            op[2].Value = crossingname;
            op[3].Value = crossingtime;
            op[4].Value = wayname;
            op[5].Value = aspectname;
            op[6].Value = processstate;
            op[7].Value = platecolor;
            op[8].Value = speed;
            op[9].Value = illegaltype;
            op[10].Value = checktime;
            op[11].Value = punishpoint;
            op[12].Value = punishcash;
            op[13].Value = blackstate;
            op[14].Value = filepath;
            op[0].Direction = ParameterDirection.Input;
            op[1].Direction = ParameterDirection.Input;
            op[2].Direction = ParameterDirection.Input;
            op[3].Direction = ParameterDirection.Input;
            op[4].Direction = ParameterDirection.Input;
            op[5].Direction = ParameterDirection.Input;
            op[6].Direction = ParameterDirection.Input;
            op[7].Direction = ParameterDirection.Input;
            op[8].Direction = ParameterDirection.Input;
            op[9].Direction = ParameterDirection.Input;
            op[10].Direction = ParameterDirection.Input;
            op[11].Direction = ParameterDirection.Input;
            op[12].Direction = ParameterDirection.Input;
            op[13].Direction = ParameterDirection.Input;
            op[14].Direction = ParameterDirection.Input;
            DBHelper.RunProcedure("p_insert_tb_vulgatecar", op);
}
界面调用:
string plateid = TextBox1.Text;
        string platetype = TextBox2.Text;
        string crossingname = TextBox3.Text;
        string crossingtime = TextBox4.Text;
        string wayname = TextBox5.Text;
        string aspectname = TextBox6.Text;
        string processstate = TextBox7.Text;
        string platecolor = TextBox8.Text;
        string speed = TextBox9.Text;
        string illegaltype = TextBox10.Text;
        string checktime = TextBox11.Text;
        string punishpoint = TextBox12.Text;
        string punishcash = TextBox13.Text;
        string blackstate = TextBox14.Text;
        string filepath = TextBox15.Text;
        TestBLL.AddProcedure(plateid, platetype, crossingname, crossingtime, wayname, aspectname, processstate, platecolor, speed, illegaltype, checktime, punishpoint, punishcash, blackstate, filepath);运行的时候会报错,错误是“必须说明标识符 'P_INSERT_TB_VULGATECAR'”,我在oracle里调用的时候没问题,可以正常添加数据,界面调用就会报错,请问应该如何修改呢?谢谢各位了

解决方案 »

  1.   

    先确认一下是c#还是oracle报错
    如果oracle报错,会是ora-xxxx 形式
      

  2.   

    ORA-06550: 第 1 行, 第 7 列: 
    PLS-00201: 必须说明标识符 'P_INSERT_TB_VULGATECAR'
    ORA-06550: 第 1 行, 第 7 列: 
    PL/SQL: Statement ignored
    但是直接在oracle里"exec p_insert_tb_vulgatecar('京A00282','社会车辆','中关村','2010-04-08 12:35:23','车道一','001','正常','黑色','89KM','','','','',0,'')"这样调用是可以插入数据的
      

  3.   

    查看arj package里是否有readmessageao函数的定义和实现,如没有,则须实现。
      

  4.   

    你的存储过程“P_INSERT_TB_VULGATECAR”是否创建在你程序里连接的oracle用户下面??
    最可能是这个问题,同意二楼的看法!