txtSQL = "select * from Line_Info where id = '" & Trim(txt1.Text) & "'"
有谁还记得这个sql语句中的''与""以及各个空格之间的关系吗?今天被问到了同样的问题,害怕理解有偏差,而且确实也挺模糊的,总归之前欠下的债还是要还回来啊。
让我欣慰的是,当年令人头疼的字符串拼接问题终于找到了正解,看来凡事不能将就啊。记得在自己敲学生的时候就有跟同学讨论过这个问题,关于sql语句的拼接以及单引号‘’和双引号"",到底怎么解释。当时每个人都有每个人的理解,我也固执的按着自己的理解开始了接下来的学习任务,毕竟语句就是那个语句,格式深深记在了自己的脑子里,照着葫芦画瓢的事情谁不会干。殊不知自己的理解又一次在今天遭到了质疑,尽管请教了两位同学,但两位同学的理解与自己的理解偏差不大,仍保留着部分疑问未解决。有句话叫做:不将就。是的,有疑问的地儿是不能放过的,关键是自己还要给别人解释呢,不能弄个错误的理解解释给别人听吧。
接下来就让我们一起看看让人头晕的符号吧!
首先我们知道这是一个常用的sql语句。
接下来就是将sql语句进行拆解:
txtSQL
表达式:"select * from Line_Info where id = '" & Trim(txt1.Text) & "'"
" "之中是字符串," " 和 " "之间用&连接)
select * from Line_Info where id = '
元素2: 运算符 字符串连接符(&--用于连接前后两个字符串,注意&就相当于一个断点,所以它前后的引号肯定不会是一对)
元素3: 控件属性 Trim(txt1.Text)(其返回值就是一个字符串类型,trim是将其中的空格去掉,以和数据库中的数据格式匹配)(因为Trim(txt1.Text)是一个变量,如果直接写在" " 中是取不到它的值的,所以必须截断字符串,将变量拼接进去)
&--用于连接前后两个字符串)
'
经过这样一拆分,想必大家也能很快的明白整条语句是怎么连接在一起的了。其实我们在数据库中执行的语句很简单,只需把查询条件写清楚即可:select * from Line_Info where id = '1',直接执行就可得到结果。只不过在VB窗体中需要先定义好变量,并通过自定义函数ExecuteSql,来执行Sql语句,set mrc=ExecuteSql(txtSQL,MsgText) 其中txtSQL和MsgText是两个参数,txtSQL是指上边用来执行的Sql语句:select * from Line_Info where .... MsgText则是指执行完Sql语句后的弹出框提示。
针对上边的语句还有一个问题就是:' ' 与 " " 括的内容分别是什么?
' ' 内是输入sql中的查询信息的, " " 是来输入的字符串,简单来说,单引号是给sql语句使用的,而双引号是给VB使用的。
select * from Line_Info where id = '1'至于数据库中执行这句话时什么情况加' '什么时候不加,就要看查询的数据类型了。
字符常量:通常一个字符常量代表ASCII字符集中的一个字符,在程序中用单引号' '把一个字符括起来作为字符常量。大小写字母代表不同的字符常量;单引号中的空格也是;字符常量只能包含一个字符,且只能用单引号括起来。如'A'、'x'、'D'、 '?'、'3'、'X'等都是字符常量。对于字符来说,'x'和'X'是两个不同的字符。
特点:
1.字符常量只能用单引号括起来,不能用双引号或其它括号。
2.字符常量只能是单个字符,不能是字符串。
3.字符可以是字符集中任意字符。但数字被定义为字符型之后就不能参与数值运算。如'5'和5 是不同的。'5'是字符常量,不能参与运算
字符串常量:字符串常量是用双引号括起来的,在C语言中系统会在每个字符串的最后自动加入一个'\0'作为字符串的结束标志。语言是相通的。
区别:'Z'是字符常量,占一个字节;"Z"是字符串常量,占两个字节,其中一个放'\0'。
它们两个的用法都明白了,区别就知道了
终于解决了当年的未解之谜,心情顿时开阔了不少 哈哈哈~ 在此还要感谢问我和我问过的同学们,让我对知识加深了理解,也体会到对知识不能过于将就,多讨论,多探究!