★ASP+Access,使用参数化存储的问题

newdigitime 2009-07-30 10:41:17
平台是ASP+ACCESS,
现在数据库的操作使用 "参数化存储",当然access中的“存储过程”实际上是“查询”。

现在在ACCESS数据库中建有一个 用于修改记录的存储,存储语句是:
update set tmp name=[@aaa],age=[@bbb] where id=[@ccc];

在asp代码中传递参数,执行这个存储:
set mycmd = Server.CreateObject("ADODB.Command")
……
mycmd.Execute ,Array("xiaoming",,3)

也就是传递了@aaa的值为"xiaoming",传递了@ccc值为3,但将@bbb的值省略,因为在实际应用中
,往往只是对部分而不是全部字段进行修改

不过这样会提示错误:

Microsoft JET Database Engine (0x80040E10)
参数 [@bbb] 没有默认值。

在表设计中@bbb参数对应的age字段是整型字段,有默认值是0,而且是“非必填字段”

对这种情况应该怎么样处理?
是对存储过程的语句进行修改,还是用另外的办法?谢谢。




...全文
166 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
凡夫与俗子 2009-08-03
  • 打赏
  • 举报
回复
不太懂,不过update不需要表吗?
update 这里不需要更新的表吗? set tmp name=[@aaa],age=[@bbb] where id=[@ccc];
newdigitime 2009-08-01
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 aemyang1987 的回复:]
其实不用command,可以直接想查询其他sql一样
conn.execute("过程名 参数1,参数2,参数3,")
[/Quote]

谢谢.不过我还是不知道这种方法的具体格式,因为除了为过程传递相关参数外,还需要为conn指定执行的任务是"存储过程",应该传递一个参数4吧

像我上面给出的例子.如果"存储过程"名为 "addnew" ,需要传递三个参数如 "xiaoming","28","teacher"
conn.execute如何写呢.
renzaijiang 2009-08-01
  • 打赏
  • 举报
回复
那就在程序中 if else 做分支
renzaijiang 2009-08-01
  • 打赏
  • 举报
回复
conn.execute("addnew 'xiaoming',0','3")
不行吗
newdigitime 2009-08-01
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 wueching 的回复:]
在存储过程声明变量@bbb后将其付值为0即可。
[/Quote]
好象在SQL中可以这样声明.不过我在access中还没找到如何对存储参数进行赋值的办法
wueching 2009-08-01
  • 打赏
  • 举报
回复
存储过程声明变量@bbb后将其付值为0即可
newdigitime 2009-08-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 yejian520 的回复:]
ACC用存储,效果明显不?当你考虑到数据库的执行效率时,为什么不转MSSQL呢
毕竟ACC作为桌面型的小型数据库,在这方面的效果提升,跨度不够大吧
[/Quote]
我的目的主要不是考虑效率问题,据说这样可以防止一些SQL注入
另外因为讨论SQL的存储很多,讲解ACC用存储的资料很少,即使有几篇,也是含糊其词,
所以我想了解一下ACC如何用存储.
newdigitime 2009-08-01
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 toury 的回复:]
conn.execute("addnew 'xiaoming','28','teacher'")
[/Quote]
谢谢.之前一直没成功,是因为给过程名上加了引号.原来不需要加引号的
toury 2009-08-01
  • 打赏
  • 举报
回复
conn.execute("addnew 'xiaoming','28','teacher'")
toury 2009-07-31
  • 打赏
  • 举报
回复
用ADOX动态修改存储过程,除此之外怕没有其他办法;除非你不用存储过程,呵呵
yejian520 2009-07-31
  • 打赏
  • 举报
回复
ACC用存储,效果明显不?当你考虑到数据库的执行效率时,为什么不转MSSQL呢
毕竟ACC作为桌面型的小型数据库,在这方面的效果提升,跨度不够大吧
ynwxl 2009-07-31
  • 打赏
  • 举报
回复
看来参数1、2、3不能少
aemyang1987 2009-07-31
  • 打赏
  • 举报
回复
其实不用command,可以直接想查询其他sql一样
conn.execute("过程名 参数1,参数2,参数3,")
AN724946274NA 2009-07-31
  • 打赏
  • 举报
回复
能不能看下原来的整段代码?
newdigitime 2009-07-31
  • 打赏
  • 举报
回复
感谢楼上朋友,因为记录中@bbb对应的字段实际上已有一个特定的值,所以不能用默认值来修改

现在就是不知道如何修改存储过程.
hello晨光 2009-07-31
  • 打赏
  • 举报
回复
这得改存储过程
或者你就在传参过程,带上默认值,也是可以的。

-------------------------
参考 http://www.33996.cn/
newdigitime 2009-07-31
  • 打赏
  • 举报
回复
顶上去,请高手指点

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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