问一个存储过程的简单问题

dangdang2471 2009-04-16 11:24:49
我正在学习使用存储过程
数据库ORACLE,存储过程如下:
CREATE OR REPLACE PROCEDURE TestInsert(idnum in number)
as
begin

INSERT INTO clob_test2 (id) values(idnum);

end TestInsert;


有一段C#代码,调用存储过程
 string SQL = "TESTINSERT";
cmd.CommandText = SQL;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("xx", OracleType.Number);
cmd.Parameters[0].Value = "210";
cmd.ExecuteNonQuery();


报错如下:
ORA-06550: 行1、列7:
PLS-00306: 调用'TESTINSERT'时自变量数量或类型错误
ORA-06550: 行1、列7:
PL/SQL: Statement ignored

请问应该怎么改?
...全文
186 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
xukaifu 2009-04-16
  • 打赏
  • 举报
回复
CREATE OR REPLACE PROCEDURE TestInsert
@idnum number
as
begin

INSERT INTO clob_test2 (id) values(@idnum);

end TestInsert;

string SQL = "exec TESTINSERT @idnum";
cmd.CommandText = SQL;
cmd.CommandType = CommandType.Text;
cmd.Parameters.Add("@idnum", OracleType.Number);
cmd.Parameters[0].Value = 210;
cmd.ExecuteNonQuery();
xukaifu 2009-04-16
  • 打赏
  • 举报
回复
CREATE OR REPLACE PROCEDURE TestInsert
@idnum number
as
begin

INSERT INTO clob_test2 (id) values(idnum);

end TestInsert;

string SQL = "exec TESTINSERT @idnum";
cmd.CommandText = SQL;
cmd.CommandType = CommandType.Text;
cmd.Parameters.Add("@idnum", OracleType.Number);
cmd.Parameters[0].Value = 210;
cmd.ExecuteNonQuery();
qldsrx 2009-04-16
  • 打赏
  • 举报
回复
这个,MSDN里写得很详细的,我第一次用的时候看了MSDN就知道怎么写了。
dangdang2471 2009-04-16
  • 打赏
  • 举报
回复
string SQL = "TESTINSERT";
cmd.CommandText = SQL;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("idnum", OracleType.Number); // 参数名是存储过程参数名相同
cmd.Parameters[0].Value = "210"; // 用“210” 和 210 都可以
cmd.ExecuteNonQuery();


改成这样就成功了
kkun_3yue3 2009-04-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 sp_chenjie 的回复:]
cmd.Parameters.Add("xx", OracleType.Number);

参数名写的不正确
[/Quote]

正确
cmd.Parameters.Add("@idnum", OracleType.Number);
猴子酋长 2009-04-16
  • 打赏
  • 举报
回复
cmd.Parameters.Add("xx", OracleType.Number);

参数名写的不正确
gciyfzx07 2009-04-16
  • 打赏
  • 举报
回复
string SQL = "TESTINSERT";
cmd.CommandText = SQL;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("xx", OracleType.Number);
cmd.Parameters[0].Value = "210";
cmd.ExecuteNonQuery();

cmd.Parameters[0].Value = "210" 不应该是字符,
改为cmd.Parameters[0].Value = 210

OKILOVE 2009-04-16
  • 打赏
  • 举报
回复
存储过程确定正确吗~手动在数据库中测试过吗~
jie3614 2009-04-16
  • 打赏
  • 举报
回复
cmd.CommandText = 存储过程的名字;
kkun_3yue3 2009-04-16
  • 打赏
  • 举报
回复
没用过ORACLE
帮顶
justin麒麟 2009-04-16
  • 打赏
  • 举报
回复
cmd.Parameters.Add("xx", OracleType.Number);
你确定参数写的没错?

111,126

社区成员

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

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

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