日期:2014-05-16  浏览次数:21119 次

开发区,贴 了一天了,一个回复的都没有:c# 调用过程,报 {"ORA-01036: 非法的变量名/编号\n"}
http://topic.csdn.net/u/20111229/15/85edf293-d263-4b2f-a858-61b7fe683afa.html?92874

请知道的,帮忙 看一下,谢谢!!

------解决方案--------------------
我已经给你回复了。请关注。
------解决方案--------------------
1、Oracle的更新不能出现Parameters顺序跟传来的参数顺序不一致的情形。

2、字段名太长,有的地方说是要小于32个字符,但我使用,它还要比32小,大家只能尽量控制字段名的长度。

3、虽然在Sql 语句中使用 冒号“:”代表参数,但在创建OracleParameter时,指定的参数名称不能使用冒号,在new OracleParameter时,ParameterName只能使用参数的字符部分 。
------解决方案--------------------
C# code
[url=http://www.cnblogs.com/zwq194/archive/2010/07/12/1775646.html]C#调用Oracle存储过程的方法  [img=http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/monkey/16.gif][/img][/url]
create or replace procedure proc2
(
v_id number,
v_name varchar2
)
is
begin
insert into test(id,name) values(v_id,v_name);
commit;
end;

 

 OracleConnection conn = new OracleConnection("server=cw;uid=ls0019999;pwd=aaaaaa");
            conn.Open();
            OracleCommand cmd = conn.CreateCommand();
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = "proc2";
            cmd.Parameters.Add("v_id", OracleType.Number).Direction = ParameterDirection.Input;//指明传入的参数是输入给oracle存储过程用的
            cmd.Parameters["v_id"].Value =this.textBox1.Text.Trim();
            cmd.Parameters.Add("v_name",OracleType.NVarChar).Direction = ParameterDirection.Input;//指明传入的参数是输入给oracle存储过程用的
            cmd.Parameters["v_name"].Value =this.textBox2.Text.Trim();
            cmd.ExecuteNonQuery();
            conn.Close();