首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

送分100分:简单的SQL语句中用CSTR的有关问题

2012-03-29 
送分100分:简单的SQL语句中用CSTR的问题。sql Insert into BIAO1 (用户编号,用户姓名,用户类型,价格) +

送分100分:简单的SQL语句中用CSTR的问题。
sql = "Insert into BIAO1 (用户编号,用户姓名,用户类型,价格)" + " values (" + CStr(GoudianKahao) + ",'" + Rst1.Fields("用户姓名") + "','" + Rst1.Fields("用户类型") + "'," + CStr(Rst1.Fields("价格")) + ")"
RST1中的字段与BIAO1中字段属性完全一致,包括字段属性,字段大小,

现在遇到的问题是如果SQL语句写成sql = "Insert into BIAO1 (用户编号,用户姓名,用户类型,价格)" + " values (" + CStr(GoudianKahao) + ",'" + Rst1.Fields("用户姓名") + "','" + Rst1.Fields("用户类型") + "'," + Rst1.Fields("价格") + ")"

即CStr(Rst1.Fields("价格")) 写成Rst1.Fields("价格") 此字段属性是数值。 
运行时会出错,为什么会出错。
而Rst1.Fields("用户姓名")字段不用加CSTR呢。

[解决办法]
严格来说,你构造这个SQL字符串时忽略了两个问题,一是Field字段值可能为Null,这就不能直接用内置函数转为字符串,二是你没有对字段值可能含有双引号分界符的情况做处理,这样很容易导致SQL出错,如在ASP等环境中,还会造成潜在的安全问题!!!

事实上,在近日的问题中就有这两点的解决方案,

VB code
'==========================================================' 函数: AddDQuotes'' 功能: 为一个字符串转换为CSV或SQL的一部分做引号处理,""""即是双引号"'' 返回: String' 作者      : 杨过.网狐.cn'' 入口: strSrc                      源字符串'Public Function AddDQuotes(ByVal strSrc As String) As String    Const CDQuote = """"        AddDQuotes = CDQuote & Replace(strSrc, CDQuote, CDQuote & CDQuote) & CDQuoteEnd Function'---------------------------------------------------' 过程名    : AsString' 时间      : 2010-2-28 13:46' 作者      : 杨过.网狐.cn' 功能      : 将可能为Null的变量转换为字符串型' 说明      :' 来源: http://topic.csdn.net/u/20100227/21/bd3a0139-8570-45f1-bc8c-09bbd08c6981.html'送分100分:text1.text = rst1.fields(-姓名-) 时出现无效使用NULL的提示'---------------------------------------------------'Function AsString(ByVal v1 As Variant) As String   On Error GoTo AsString_Error    AsString = v1   On Error GoTo 0   Exit FunctionAsString_Error:    AsString = ""    End Function
[解决办法]
sql = "Insert into BIAO1 (用户编号,用户姓名,用户类型,价格) values (" & CStr(GoudianKahao) & ","& iif(isnull(rst1!用户姓名)=true,'',"'"& rst1!用户姓名 &"'") &",iif(isnull(rst1!用户类型)=true,'',"'"& rst1!用户类型 &"'") &",iif(isnull(rst1!价格)=true,"0","" & rst1!价格 &"") &")"
[解决办法]
"即CStr(Rst1.Fields("价格")) 写成Rst1.Fields("价格") 此字段属性是数值。 运行时会出错,为什么会出错。 
而Rst1.Fields("用户姓名")字段不用加CSTR呢。"

1.确定两个表字段一致.
2.修改 "'," + Rst1.Fields("价格") + " ==>

"'," & Rst1.Fields("价格") & "



+ 和 & 的区别

+
根据两边的操作数不同分几种情况
1、两边都是字符。则执行字符串连接功能
2、两边都是数字。则执行数学加法
3、两边有一个是数字字符,另外一个是数值,则自动将数字字符转换为具体的数值进行加法
4、两边有一个事非数字字符、另外一个事数字、那么就会报错,应为无法将非数字字符转换为数字。
&
无论两边是什么,都想将其转换为字符,然后进行字符连接。如果你要连接字符建议只用”&“





[解决办法]
lz要学会查看变量值,
比如加 debug.print

VB code
sql = "Insert into BIAO1 (用户编号,用户姓名,用户类型,价格)" + " values (" + CStr(GoudianKahao) + ",'" + Rst1.Fields("用户姓名") + "','" + Rst1.Fields("用户类型") + "'," + Rst1.Fields("价格") + ")" debug.print sql
[解决办法]
探讨
即CStr(Rst1.Fields("价格")) 写成Rst1.Fields("价格")  此字段属性是数值。


运行时会出错,为什么会出错。
而Rst1.Fields("用户姓名")字段不用加CSTR呢。


[解决办法]
sql = "Insert into BIAO1 (用户编号,用户姓名,用户类型,价格)" & " values (" & CStr(GoudianKahao) & ",'" & Rst1.Fields("用户姓名") & "','" & Rst1.Fields("用户类型") & "'," & Rst1.Fields("价格") & ")"

如果有数值标量的话,+ 号有二义性,都改为字符串连接符。

字符串就用连接符,而不是加号,是好的编码习惯。
[解决办法]
关注一下 回复内容太短了

热点排行