首页 新闻 搜索 专区 学院

C# 关于Oracle数据库存储过程的问题

0
悬赏园豆:10 [已解决问题] 解决于 2014-01-17 10:03

在做一个C#调用Oracle数据库存储过程对数据库进行操作的练习,不知道为什么可查可增,但是在调用改的存储过程的时候,数据库没有任何反应。

 

C#的代码如下:

string connstr = "Data Source=ORCL;User ID=C##CSHARPTEST;Password=123456";
OracleConnection conn = new OracleConnection(connstr);
conn.Open();

OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "C##CSHARPTEST.procedure_update";
cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.Clear();
var paramI = new OracleParameter("i", OracleDbType.Int32);
paramI.Direction = ParameterDirection.Input;

var paramX = new OracleParameter("x", OracleDbType.Int32);
paramX.Direction = ParameterDirection.Input;

var paramY = new OracleParameter("y", OracleDbType.Int32);
paramY.Direction = ParameterDirection.Input;

cmd.Parameters.Add(paramX);
cmd.Parameters.Add(paramY);
cmd.Parameters.Add(paramI);

cmd.Parameters["i"].Value = Convert.ToInt32(this.dataGridView1.Rows[dataGridView1.CurrentCell.RowIndex].Cells["ID"].Value);
cmd.Parameters["x"].Value = Convert.ToInt32(textBox_x.Text);
cmd.Parameters["y"].Value = Convert.ToInt32(textBox_y.Text);

int count = cmd.ExecuteNonQuery();

conn.Close();

 

Oracle的存储过程如下:

create or replace procedure procedure_update
(
i in number,
x in number,
y in number
)
is
begin
update tb_csharptest
set xvalue=x, yvalue=y
where id=i;
commit;
end;

 

纯新手,不足之处请多指教。

貂猫的主页 貂猫 | 初学一级 | 园豆:195
提问于:2014-01-17 09:35
< >
分享
最佳答案
0

i in number,
x in number,
y in number
)
is
begin
update tb_csharptest
set xvalue=x, yvalue=y 
where id=i;

 

 

 你试试 可能与参数顺序有关。

x in number,
y in number,
i in number   你定义为x,y,i试试。、

收获园豆:10
aehyok | 小虾三级 |园豆:1012 | 2014-01-17 09:54

确实是与参数顺序有关  不过不明白为啥会跟参数顺序有关  

貂猫 | 园豆:195 (初学一级) | 2014-01-17 09:58

@貂猫: http://czmmiao.iteye.com/blog/1489625  你可以看看这里。

事实上绑定变量只是起到占位的作用,同名的绑定变量并不意味着它们是相同的,在传递时要考虑的是传递的值与绑定变量出现顺序的对位,而不是绑定变量的名称。

aehyok | 园豆:1012 (小虾三级) | 2014-01-17 10:01

@aehyok: 明白  谢谢

貂猫 | 园豆:195 (初学一级) | 2014-01-17 10:02
其他回答(1)
0

闹了半天,找出原因了:参数顺序错了

 

存储过程中:

i in number,
x in number,
y in number

 

C#中:

cmd.Parameters.Add(paramX);
cmd.Parameters.Add(paramY);
cmd.Parameters.Add(paramI);

 

至于为啥这么做会错就不清楚了

貂猫 | 园豆:195 (初学一级) | 2014-01-17 09:50
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册