请教,质疑 sql = sql + "..."的写法

xiajuner 2003-12-06 01:06:47
以前在写长sql或需要动态判断sql的where条件时,都写成了sql = sql + "where ..."的形式,但是,今天遇到了一个问题:

先看下面这段:
<%
Option Explicit

dim usrname '//出问题的变量
'//其它变量的定义,略

On Error Resume Next
Connect
'//开始更新事务
conn.BeginTrans
'//向MemberPurchaseInfo表插入新购买记录
sql = "insert into MemberPurchaseInfo(MemberID,PurchasedDate,PurchasedAmount,PurchasedPoints,TransactionNote,TransactionID) "
sql = sql + "values("&M_ID&",'"&P_Date&"',"&P_Amount&","&P_Points&",'"&T_Note_Str&"','"&T_NO&"') "
conn.execute(sql)

'//更新MemberProfile的用户点数
sql = "update MemberProfile set Points = Points + "&P_Points&" "
sql = sql + "where username="&username&"" '//出问题的地方
conn.execute(sql)
if conn.errors.count > 0 then
conn.errors.clear
conn.RollBackTrans
response.redirect "error.asp?err=22"
end if
conn.CommitTrans '//提交事务

1.以上是用事务同时对两张表的更新,我在出问题的地方拼写错误,把usrname错写成了username(多写了一个e),本来应该是空语句,不执行,但是我看到库里所有的用户点数居然全加了P_Points?!!

2.但我若把出问题的sql语句合并成一条
sql = "update MemberProfile set Points = Points + "&P_Points&" where username="&username&""
则执行的是空语句,不出现问题。

这个到底是怎么回事呢?

另:我的环境是ASP+Sql Server2000,在EditPlus下code

...全文
50 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiajuner 2003-12-06
  • 打赏
  • 举报
回复
to:Stiven_PFan(您的程序执行了非法操作)
不执行on error resumer next
肯定是报错了:
运行时错误

因为我是用option explicit 强制定义变量的,检测到username没定义自然就有运行时错误了。

to:美丽心情(够high,生活才会happy)
我比你更晕啊:-(
美丽心情 2003-12-06
  • 打赏
  • 举报
回复
头晕
Stiven_PFan 2003-12-06
  • 打赏
  • 举报
回复
你最好先不执行on error resume next看看,出什么错误信息,再贴出来吧。
我看你这语句是没问题的。
dippergao 2003-12-06
  • 打赏
  • 举报
回复
sql = sql + "..."
这种写法是什么写法?
为什么这么写?
有什么好处吗?
这么些的格式是什么样的啊?
偶有些看不懂
xiajuner 2003-12-06
  • 打赏
  • 举报
回复
Points和usrname都是int型的

sql = sql + " where username="&username
以及
strsql=strsql & "where username=" & username

都试过了,还是老样子
grady.lu 2003-12-06
  • 打赏
  • 举报
回复
在错误的地方的用response.write打印strsql最终情况是什么?然后再判断,这样好一些
grady.lu 2003-12-06
  • 打赏
  • 举报
回复
strsql=strsql & "where username=" & username
possible_Y 2003-12-06
  • 打赏
  • 举报
回复
还有,你的Points字段应该为数字型的,否则也会错
possible_Y 2003-12-06
  • 打赏
  • 举报
回复
sql = "update MemberProfile set Points = Points + "&P_Points
sql = sql + "where username='"&username&"'" 'username为文本型,要加''
美丽心情 2003-12-06
  • 打赏
  • 举报
回复
试试这个:

sql = "update MemberProfile set Points = Points + "&P_Points
sql = sql + " where username="&username


呵呵
xiajuner 2003-12-06
  • 打赏
  • 举报
回复
to:cshadow(影子)
这个我知道的,以前也一直这样用,但今天就是出问题了!

xiajuner 2003-12-06
  • 打赏
  • 举报
回复
试过了,还是一样
cshadow 2003-12-06
  • 打赏
  • 举报
回复
分开和不分开是没有什么关系的,就是把两个字符串连接起来而已
ygghost 2003-12-06
  • 打赏
  • 举报
回复
strsql=strsql & "where username="'&username&'""
BingGroup 2003-12-06
  • 打赏
  • 举报
回复

sql = sql & "where username="&username&"" '//出问题的地方


试一下怎么样?

28,407

社区成员

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

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