Vb6 通过adodb准备语句插入空字符串

Vb6 通过adodb准备语句插入空字符串,vb6,adodb,Vb6,Adodb,在For-Each循环中,我的VB程序迭代一个集合 在这个循环中,我正在为准备好的语句设置参数 Set param1 = cmd.CreateParameter("sync_id", adChar, adParamInput, Len(sync_id), sync_id) Set param2 = cmd.CreateParameter("fieldname", adChar, adParamInput, Len(CName), CName) Set param3 = cmd.CreatePar

在For-Each循环中,我的VB程序迭代一个集合

在这个循环中,我正在为准备好的语句设置参数

Set param1 = cmd.CreateParameter("sync_id", adChar, adParamInput, Len(sync_id), sync_id)
Set param2 = cmd.CreateParameter("fieldname", adChar, adParamInput, Len(CName), CName)
Set param3 = cmd.CreateParameter("pvname", adChar, adParamInput, Len(pvname), pvname)
Set param4 = cmd.CreateParameter("value", adChar, adParamInput, Len(CNameVal), CNameVal)
然后将命令对象附加到它们

cmd.Parameters.Append param1
cmd.Parameters.Append param2
cmd.Parameters.Append param3
cmd.Parameters.Append param4
CNameVal
param4
)为空时,VB给我一个错误:paramater对象未正确定义

在创建参数之前,我尝试通过检查
CNameVal
来解决此问题:

If CNameVal = Empty Then
    Set param4 = cmd.CreateParameter("value", adEmpty, adParamInput)
    'Set param4 = cmd.CreateParameter("value")
    'Set param4 = cmd.CreateParameter("value", adEmpty, adParamInput, Len(CNameVal), CNameVal)
Else
    Set param4 = cmd.CreateParameter("value", adChar, adParamInput, Len(CNameVal), CNameVal)
End If
这两条线都不能解决问题。谢谢你的帮助

Len(空)=0
,这会导致错误。字符串长度不能为
0

这里正确的做法是提供数据库中设置的实际固定长度,而不是当前字符串的长度。我还怀疑您是否需要
adChar
,您可能是指
adVarChar


因为
CNameVal=Empty
永远不会是
真的,所以
如果
不起作用。检查空的正确方法是
IsEmpty(CNameVal)

Len(Empty)=0
,这确实是个问题!现在,当长度=0时,我手动将长度设置为1。你对
CNameVal=Empty
的说法不正确:在我的情况下
IsEmpty(CNameVal)
永远不会是
True
CNameVal=Empty
CNameVal=”“
是。。。这很奇怪吗?:)@ZacL我错了,你可以用
空的
(你不能用
空的
)来比较。但是
Empty
Variant
数据类型中的一个特殊值,您可以使用它来判断字符串的长度是否为零。这是因为VB为您处理转换,因此
Empty=”“
产生
True
,尽管它们是不同的东西。为了让代码更清楚地了解其目标,建议您检查
Len(a_string)=0
,而不是
a_string=Empty