c#中如何调用存储过程

pear185 2010-11-11 01:26:22
我写了个简单的存储过程,如下:
create or replace procedure sp2(v_empno number) is
v_sal number(7,2);
begin
update emp set sal=sal+200 where empno=v_empno;
select sal into v_sal from emp where empno=v_empno;
dbms_output.put_line('员工号:'||v_empno||' 工资:'||v_sal);
end;
在c#中的调用程序如下:
string constr = "data source=test;user id=scott;password=tiger";
OracleConnection con = new OracleConnection(constr);
OracleCommand com = new OracleCommand("sp2", con);
com.CommandType = CommandType.StoredProcedure;
con.Open();
OracleParameter p1 = new OracleParameter("@v_empno", OracleType.Int32);
OracleParameter p2 = new OracleParameter("@v_sal",OracleType.Double);
p1.Direction = ParameterDirection.Input;
p1.Value = 7369;
p2.Direction = ParameterDirection.Output;
com.Parameters.Add(p1);
com.Parameters.Add(p2);
com.ExecuteNonQuery();
textBox1.Text = com.Parameters["v_sal"].Value.ToString();
con.Close();
}

可是一直提示我ORA-01036:非法的变量名/编号
请高手指导,谢谢!
...全文
459 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
机器人 2010-11-15
  • 打赏
  • 举报
回复
还需要定义一个ReturnValue的Parameter的。

更多Oracle PL/SQL调用方法,参考:


http://blog.csdn.net/fangxinggood/archive/2005/10/17/507989.aspx
liuhb0319 2010-11-15
  • 打赏
  • 举报
回复
这个可是初级问题哦!
pear185 2010-11-14
  • 打赏
  • 举报
回复
呵呵,谢谢,用你的方法终于解决了!!
pear185 2010-11-14
  • 打赏
  • 举报
回复
呵呵,谢谢,用你的方法终于解决了!!
pear185 2010-11-12
  • 打赏
  • 举报
回复
去掉@变成是这种 异常: 调用SP2时参数个数或类型错误。唉 还是不行,到底是什么原因呀,郁闷ing
pear185 2010-11-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 darksmile 的回复:]
把@符号去掉

OracleParameter p1 = new OracleParameter("v_empno", OracleType.Int32);
OracleParameter p2 = new OracleParameter("v_sal",OracleType.Double);
[/Quote]


改了后到成了是这个异常:
darksmile 2010-11-12
  • 打赏
  • 举报
回复
把存储过程改下

create or replace procedure sp2(v_empno in number, v_sal out number) is
begin
update emp set sal=sal+200 where empno=v_empno;
select sal into v_sal from emp where empno=v_empno;
dbms_output.put_line('员工号:'||v_empno||' 工资:'||v_sal);
end;
pear185 2010-11-12
  • 打赏
  • 举报
回复
回复4楼:我想要得到的是 存储过程的输出参数值
heku518 2010-11-11
  • 打赏
  • 举报
回复
这么完整记得给分哈!
heku518 2010-11-11
  • 打赏
  • 举报
回复
这是给你的参考代码

CREATE PROCEDURE AddAreaRecord --创建视图
(
@AreaNo nvarchar(10),
@AreaName nvarchar(10),
@BulidNum int,

@Coord nvarchar(10),
@Remark nvarchar(50)

)
AS
Begin Transaction Add_AreaRecord
IF Exists (SELECT 1 FROM Area Where AreaNo = @AreaNo) --判断表里面是否有该条记录
ROLLBACK TRANSACTION Add_AreaRecord --如果有则不执行

ELSE --否则,执行添加另一个表的记录
BEGIN

INSERT INTO Area --添加一个表的记录
(AreaNo,AreaName,BulidNum,Coordinate,Remark)
VALUES
(@AreaNo,@AreaName,@BulidNum,@Coord,@Remark)

COMMIT TRANSACTION Add_AreaRecord --提交事务

END
GO



SqlConnection conn = G_SqlExecute.GetCon();
conn.Open();
SqlCommand myCommand = new SqlCommand("AddAreaRecord", conn);

//指明sql的操作类型是存储过程
myCommand.CommandType = CommandType.StoredProcedure;

//给存储过程添加参数
SqlParameter para1 = new SqlParameter("@AreaNo", SqlDbType.NVarChar, txtAreaNo.Text.Length);
para1.Value = txtAreaNo.Text;
myCommand.Parameters.Add(para1);

SqlParameter para2 = new SqlParameter("@AreaName", SqlDbType.NVarChar, txtAreaName.Text.Length);
para2.Value = txtAreaName.Text;
myCommand.Parameters.Add(para2);

SqlParameter para3 = new SqlParameter("@BulidNum", SqlDbType.NVarChar, txtBulidNum.Text.Length);
para3.Value = txtBulidNum.Text;
myCommand.Parameters.Add(para3);

SqlParameter para4 = new SqlParameter("@Remark", SqlDbType.NVarChar, rtbRemark.Text.Length);
para4.Value = rtbRemark.Text;
myCommand.Parameters.Add(para4);

SqlParameter para5 = new SqlParameter("@Coord", SqlDbType.NVarChar, txtCoord.Text.Length);
para5.Value = txtCoord.Text;
myCommand.Parameters.Add(para5);


if (myCommand.ExecuteNonQuery() > 0)
{
MessageBox.Show("数据添加成功!");
initAreaNo();
LoadData();
}
else
{
MessageBox.Show("数据添加失败!");
}
conn.Close();
cjh200102 2010-11-11
  • 打赏
  • 举报
回复
楼上OK
ysz89757 2010-11-11
  • 打赏
  • 举报
回复
darksmile 2010-11-11
  • 打赏
  • 举报
回复
把@符号去掉

OracleParameter p1 = new OracleParameter("v_empno", OracleType.Int32);
OracleParameter p2 = new OracleParameter("v_sal",OracleType.Double);

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧