在做一个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;
纯新手,不足之处请多指教。
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试试。、
确实是与参数顺序有关 不过不明白为啥会跟参数顺序有关
@貂猫: http://czmmiao.iteye.com/blog/1489625 你可以看看这里。
事实上绑定变量只是起到占位的作用,同名的绑定变量并不意味着它们是相同的,在传递时要考虑的是传递的值与绑定变量出现顺序的对位,而不是绑定变量的名称。
@aehyok: 明白 谢谢
闹了半天,找出原因了:参数顺序错了
存储过程中:
i in number,
x in number,
y in number
C#中:
cmd.Parameters.Add(paramX);
cmd.Parameters.Add(paramY);
cmd.Parameters.Add(paramI);
至于为啥这么做会错就不清楚了