c#中编写Oracle的SQL语句命令并传递参数的问题.

ff167 2007-07-24 03:07:44
最近才用oracle,发生了点问题

连接等用的是Oracle.DataAccess.Client类

以下是对同一份表(MEMBER)的操作,ID是NUMBER(10),MEMBERNAME是VARCHAR2(50)

DB db = new DB();
OracleParameter[] OraParams = new OracleParameter[1];
OraParams[0] = new OracleParameter("ID", OracleDbType.Int32, 10, 2, ParameterDirection.Input);
DataTable dt = db.GetRecord("select * from et_member where ID = :ID", OraParams);

这样的查询语句,是正常的,能查出正确的结果.

然而
DB db = new DB();
OracleParameter[] OraParams = new OracleParameter[2];
OraParams[0] = new OracleParameter("ID", OracleDbType.Int32, 2, 10, ParameterDirection.Input);
OraParams[1] = new OracleParameter("MemberName", OracleDbType.Varchar2, 50, "xxxy", ParameterDirection.Input);
db.ExecuteNonQuery("update et_member set MemberName=:MemberName where ID = :ID", OraParams);

这样写的语句,却报ORA01722 无效数字错误.

如果两个参数都是字符串(当然WHERE里要修改),程序就又没有错了.怎么回事?是NUMBER对应的类型问题还是什么问题?
...全文
794 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ff167 2007-07-24
  • 打赏
  • 举报
回复
刚去查了下

Looks like your parameters are bound in the wrong order. ODP.NET binds by position by default.

Fix the order or set OracleCommand.BindByName = true.

David

回去试下看看先,先谢谢.等下再报告

现在又遇到ORA-12516数据库重启中...不过觉得是某些资源没释放一类的问题 - -
amandag 2007-07-24
  • 打赏
  • 举报
回复
DB db = new DB();
OracleParameter[] OraParams = new OracleParameter[2];
OraParams[1] = new OracleParameter("?", OracleDbType.Varchar2, 50, "xxxy", ParameterDirection.Input);
OraParams[0] = new OracleParameter("?", OracleDbType.Int32, 2, 10, ParameterDirection.Input); //ID在后
db.ExecuteNonQuery("update et_member set MemberName=? where ID = ?", OraParams);
amandag 2007-07-24
  • 打赏
  • 举报
回复
参数顺序的问题,占位符用?即可
北京的雾霾天 2007-07-24
  • 打赏
  • 举报
回复
看下下是不是参数顺序的问题,这样改一下:

DB db = new DB();
OracleParameter[] OraParams = new OracleParameter[2];
OraParams[0] = new OracleParameter("MemberName", OracleDbType.Varchar2, 50, "xxxy", ParameterDirection.Input);
OraParams[1] = new OracleParameter("ID", OracleDbType.Int32, 2, 10, ParameterDirection.Input);
db.ExecuteNonQuery("update et_member set MemberName=:MemberName where ID = :ID", OraParams);

可能Oracle的参数只是使用占位符,而不是命名参数。就是按位置顺序来匹配。

110,539

社区成员

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

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

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