#32001/11/12 10:05:00
引用原文:
cmmUpdateIsRead.CommandText = "UPDATE ShortMessage SET IsRead ="Y" WHERE ShortMessageID ='" + Replace(cmmUpdateIsRead__varShortMessageID, "'", "''") + "' "
一个标准的sql结构化查询语句就上例写一句,如下:
Update ShortMessage SET IsRead='Y' Where ShortMessageID=123
出现错误的可能有几个,一个是数据类型不匹配,另外一个就是where语句中选定的纪录不唯一,我相信应该不会出现不唯一的现象,按照错误提示看很可能是数据类型不匹配。
首先,IsRead='Y',需要知道你的数据库中IsRead字段值是什么类型的,是char,还是boolen类型。其次ShortMessageID字段数据类型为什么,按照一般来说,应该为一个int类型,如果位int类型,在sql语句中,他就不应该用单引号包括起来,而程序中
WHERE ShortMessageID ='" + Replace(cmmUpdateIsRead__varShortMessageID, "'", "''") + "' "
的结果是WHERE ShortMessageID='123',显然会出错。但是如果数据库中ShortMessageID的字段类型为字符类型,那么此处就没有错误了。
现在我们再来讨论IsRead='Y'的问题,看题目数据库中好像为char,长度为1,保存的为字符N或者字符Y,在sql语句中你使用的是双引号,建议你改成单引号,就是因为你这个双引号造成了“语句未结束”的错误,事实上,使用了双引号以后,你的sql语句变成了n段,为
"UPDATE ShortMessage SET IsRead ="这是一段,
Y这是一段
" WHERE ShortMessageID ='" + Replace(cmmUpdateIsRead__varShortMessageID, "'", "''") + "' "
这是一段
和起来肯定是一个错误的语句,修改正确以后应该为
cmmUpdateIsRead.CommandText = "UPDATE ShortMessage SET IsRead ='Y' WHERE ShortMessageID ='" + Replace(cmmUpdateIsRead__varShortMessageID, "'", "''") + "' "
或者
cmmUpdateIsRead.CommandText = "UPDATE ShortMessage SET IsRead ='Y' WHERE ShortMessageID =" + Replace(cmmUpdateIsRead__varShortMessageID, "'", "''")
经验:
1。在sql语句中,不要随便使用双引号,尽量使用单引号
2。数据类型一定要注意匹配,字符,日期类型需要用单引号包围起来,数字类型一定不要用单引号包围起来
3。sql语句中变量的使用一定要注意正确的书写方法,下面是错误范例
引用原文:
UPDATE ShortMessage
SET IsRead = 'Y'
WHERE ShortMessageID = 'varShortMessageID'
这次出现的错误是“数据类型不匹配”,而不是“语句未结束”,这也证明了我的想法,ShortMessageID不应该是字符串类型,而是数值类型,错误在于,ShortMessageID = 'varShortMessageID'写法并不会如愿将变量varShortMessageID的值传递给ShortMessageID ,而是将字符串'varShortMessageID'传递给ShortMessageID,造成数据类型不匹配。正确的sql写法为
"UPDATE ShortMessage SET IsRead = 'Y' WHERE ShortMessageID =" + varShortMessageID
对于你的情况,正确的写法为:
cmmUpdateIsRead.CommandText = "UPDATE ShortMessage SET IsRead ='Y' WHERE ShortMessageID =" + cmmUpdateIsRead__varShortMessageID
cmmUpdateIsRead.CommandText = "UPDATE ShortMessage SET IsRead ='" + varIsRead + "' WHERE ShortMessageID =" + cmmUpdateIsRead__varShortMessageID
4。注意在sql语句中replace函数的正确使用地方和方法,对于变量是字符串类型的,一定要使用replace(str,"'","''"),意思是将str中的每1各单引号替换未2个单引号,否则会造成sql语句出现错误或者丢失单引号。
编辑历史:[这消息被zhumk编辑过(编辑时间2001-11-12 10:05:42)]