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

送分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) & CDQuote
End Function

'---------------------------------------------------
' 过程名    : AsString
' 时间      : 2010-2-28 13:46
' 作者      : 杨过.网狐.cn
' 功能      : 将可能为Null的变量转换为字符串型
' 说明      :
' 来源: http://topic.****.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 Function

AsString_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("价格")  此字段属性是数值。