asp.net dataset Oracle数据库,创建出的sql语句,参数顺序错误!!

KeyrraTuff 2011-03-14 06:49:38
asp.net 2.0
oracle 11g
odp Oracle.DataAccess, Version=2.112.2.0

创建一个DataSet1,在一个TableAdapter里面新增一个查询,delete类型(实际上就是NonQuery),
语句如下:DELETE FROM PERMISSION
WHERE (JOBID IN
(SELECT JOBID
FROM JOB
WHERE (CORPID = :corpid))) AND (LOGINNAME = :userid)

创建过程一切正常,创建出一个DeleteQuery(:userid,:corpid) 请注意参数顺序。


在.aspx.cs页面里面调用:
DataSet1TableAdapters.DataTable1TableAdapter ta = new DataSet1TableAdapters.DataTable1TableAdapter();
ta.DeleteQuery("Tuff","00000000-0000-0000-0000-000000000002");

语句正常完成,数据库该删除的东西还在。经过反复测试,当调用时候参数反着给:
ta.DeleteQuery("00000000-0000-0000-0000-000000000002", "Tuff");
反而出现了预期的要求。


另外,在DataSet开发界面,右键点击这条SQL查询,再点击“查询生成器”,点击"执行查询",系统会提示你输入测试所需要的参数值,此时输入框中:corpid在前面,:userid在第二个,输入参数,也能正常执行。


请问这是为什么?????
QQ: 251511
...全文
78 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
strife013 2011-03-15
  • 打赏
  • 举报
回复
楼主应该看清楚DeleteQuery这个函数参数的含义,我觉得应该和名字无关:usrid只是个标签而已,物理上的顺序
lester19872007 2011-03-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 keyrratuff 的回复:]
引用 8 楼 lester19872007 的回复:
确定的说 就是你的顺序弄反了,或则你的参数赋值,赋反了!

正常就是按照参数名给参数,不是我反了吧。
[/Quote]
用心检查一下你的程序吧!
Rock870210 2011-03-15
  • 打赏
  • 举报
回复
楼主不要纠结了。
传递参数的顺序要按照Sql语句中定义的顺序来。否则,系统不认可的。
也许你在MSSql中可以在SqlParamter数组中乱序,但是Oracle,楼主你还是老老实实的顺序排好!
KeyrraTuff 2011-03-15
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 lester19872007 的回复:]
确定的说 就是你的顺序弄反了,或则你的参数赋值,赋反了!
[/Quote]
正常就是按照参数名给参数,不是我反了吧。
lester19872007 2011-03-15
  • 打赏
  • 举报
回复
确定的说 就是你的顺序弄反了,或则你的参数赋值,赋反了!
lester19872007 2011-03-15
  • 打赏
  • 举报
回复
WHERE (JOBID IN
(SELECT JOBID
FROM JOB
WHERE (CORPID = :corpid))) AND (LOGINNAME = :userid)

创建过程一切正常,创建出一个DeleteQuery(:userid,:corpid)


首先看你两个参数,userid 和 corpid

那么必然的 你通过存储过程 传递的参数 顺序也应该保持一直,

CREATE OR REPLACE PROCEDURE xxxxxxxxxxx_p (userid nvarchar2(20),corpid nvarchar2(20))
as
begin
end
KeyrraTuff 2011-03-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wxr0323 的回复:]
试所需要的参数值,此时输入框中:corpid在前面,:userid在第二个,输入参数,也能正常执行

DeleteQuery(:userid,:corpid)

这两个顺序不一样啊。。
[/Quote]
感谢你看出来了,就因为vs自己查询测试正常,就因为确实这个顺序对的,和他生成的方法的参数不一致,还好是2个string,可以换着来,如果不是真不知道顺序换了是神马效果了。
子夜__ 2011-03-14
  • 打赏
  • 举报
回复
试所需要的参数值,此时输入框中:corpid在前面,:userid在第二个,输入参数,也能正常执行

DeleteQuery(:userid,:corpid)

这两个顺序不一样啊。。
KeyrraTuff 2011-03-14
  • 打赏
  • 举报
回复
关键是,普遍意义上的认知就是用名称自动匹配,不存在顺序问题,可现在有这个问题了。
strife013 2011-03-14
  • 打赏
  • 举报
回复
说明DeleteQuery(:userid,:corpid)的传参顺序按照sql参数顺序来的么,:userid只是个标签而已和顺序无关
Jack2013tong 2011-03-14
  • 打赏
  • 举报
回复
不用生成,自己指定不行?

62,047

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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