2017-05-18 56 views
0

我有一個腳本上傳CSV項目。數據庫中有3列CSV和3列。SQL Server插入錯誤的值與VBScript

代碼(爲nvarchar 255)
名(爲nvarchar 255)
價格(錢)

腳本如下

' --- Connect to File.CSV 
csvConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" 
&Server.MapPath("..\upload") &";Extended 
Properties='text;HDR=Yes;FMT=Delimited';" 
Set connCSV = Server.CreateObject("ADODB.Connection") 
connCSV.Open csvConnStr 


set csvCmd = Server.CreateObject("ADODB.Command") 
csvCmd.ActiveConnection = connCSV 
csvCmd.CommandType = 1 
csvCmd.CommandText = "SELECT * FROM upload.csv" 
set rsCsv = csvCmd.Execute 

csvCode= rsCsv.fields.item(0) 
csvName= rsCsv.fields.item(1) 
csvPrice = rsCsv.fields.item(2) 

注意 - 我已經通過CSV爲做中省略環不覺得這是我的問題的原因,但可以包括要求。

set insertCmd = Server.CreateObject("ADODB.Command") 
insertCmd.ActiveConnection = conn 
insertCmd.CommandType = 1 
insertCmd.CommandText = "INSERT INTO tblProducts (code, name, price) VALUES (?,?,?)" 
insertCmd.Parameters.append(
insertCmd.CreateParameter("@code",200,1,255,csvCode)) 
insertCmd.Parameters.append(
insertCmd.CreateParameter("@name",200,1,255,csvName)) 
insertCmd.Parameters.append(
insertCmd.CreateParameter("@price", 6, 1, , csvPrice)) 
insertCmd.Execute 

我的CSV結構如下

Item Code, Item Name, Item Price 
00001, First Item, 100 
00002, Second Item, 100 

該腳本將插入精細,除了在物品代碼是以字符「F」的情況。

實施例,

Item Code, Item Name, Item Price 
F0445, Item X, 200 

將插入一個記錄,但在數據庫將具有代碼= 445

這僅是被F,所以碼,諸如

Item Code, Item Name, Item Price 
G0445, Item Y, 200 
FG0445, Item X, 200 

將插入很好。 F是VBScript中的特殊字符嗎?它怎麼會不會插入整個代碼?

+1

請保持冷靜,並嘗試逐一找出原因。 –

+0

你在sql語句中的varchars周圍是否有單引號?完成的sql語句在運行時如何顯示? – Sourcery

+0

謝謝紅人。 Hi @Sourcery,我沒有在sql語句中的變量周圍使用單引號。我打印出SQL語句,並將值作爲縮小的代碼插入。我在csvCode = rsCsv.fields.item(0)和這裏csvCode = 0445之後添加了一個打印。讀取的是刪除前幾個字符(當然,只有當以F開頭時) – ochhii

回答

1

迴應評論。

我想F以某種方式格式化數據,所以通過使用單引號,所以值'F0445'應該工作添加一個varchar到數據庫?所以最終的sql應該是:INSERT INTO tblProducts(code,name,price)VALUES('F0445','Item X',200),單引號告訴sql它插入了文本。

同樣來自您最後的評論,將Excel中的列/單元格格式化爲文本。