您的查询仅使用文字字符串CSVRoom
,CSVLocation
等,而不是它们的值。这$CSVSerial
在 VB 中不起作用——那是 PHP 的事情(加上一些其他语言)。此外,如果这些是字符串值,则需要用单引号括起来。尝试这样的事情:
commandText = "Update Inventory Set Room = '" & CSVRoom & "', " & _
"Location = '" & CSVLocation & "', " & _
"AssetTag = '" & CSVAssetTag & "', " & _
"CheckedOutTo = '" & CSVCheckedOutTo & "' where SerialNumber = '" & CSVSerial & "'"
我假设所有的列都是字符串。如果有数字,您不需要在它们周围加上单引号,但它们也不应该受到伤害。
附录:后续问题是如何仅在列不为空或不为空时更新列。
要测试空白或空值,您可以使用如下条件:
Room IS NULL OR Room = ''
...或像这样:
COALESCE(Room, '') = ''
第二个较短,因此我将继续使用它,因为命令行变得很长。基本的 MySQL 命令如下所示:
UPDATE Inventory SET
Room = CASE WHEN COALESCE(Room, '') = '' THEN Room ELSE 'new value' END,
...
因此,如果 Room 是''
或NULL
它被设置为现有的''
或NULL
值。如果不是,则将其设置为新值。
这是它在 VBScript 中的外观。这是未经测试的,因为我没有可用的 VBScript。
commandText = "UPDATE Inventory SET " & _
"Room = CASE WHEN COALESCE(Room, '') = '' THEN Room ELSE '" & CSVRoom & "' END, " & _
"Location = CASE WHEN COALESCE(Location, '') = '' THEN Location ELSE '" & CSVLocation & "' END, " & _
"AssetTag = CASE WHEN COALESCE(AssetTag, '') = '' THEN AssetTag ELSE '" & CSVAssetTag & "' END, " & _
"CheckedOutTo = CASE WHEN COALESCE(CheckedOutTo, '') = '' THEN CheckedOutTo ELSE '" & CSVCheckedOutTo & "' END " & _
"WHERE SerialNumber = '" & CSVSerial & "'"