2017-07-05 29 views
0

我想將列表框中的項目添加到訪問數據庫。不過,起初,我收到一條錯誤消息,說syntax was missing但現在,我似乎得到Conversion from string "" to type 'Double' is not valid ERROR。我已經研究過這個,它說這是因爲可能有一個文本框是空的,但列表框中有很多項目,這是我不知道的。將列表框中的項目添加到訪問數據庫時出現字符串錯誤

幫助將不勝感激,謝謝。

Dim vari1 As String 
     MyConn = New OleDbConnection 
     MyConn.ConnectionString = connString 
     MyConn.Open() 
     Dim cmd1 As OleDbCommand = New OleDbCommand(str1, MyConn) 
     Try 
      For i As Integer = 0 To LstOrderItems.Items(i) - 1 
       vari1 = LstOrderItems.Items.Item(i).ToString 
       cmd1.CommandText = ("insert into RestaurantData ([Food Order]) VALUES(" + vari1 + ")") 
       cmd1.ExecuteNonQuery() 

      Next 
     Catch ex As Exception 
      MsgBox(ex.Message) 
     End Try 
     MyConn.Close() 
    End If 

回答

1

看來這條線是你的問題:

For i As Integer = 0 To LstOrderItems.Items(i) - 1 

你試圖在索引i爲編號的項目(這是目前0)讀取環路。

我想你的意思寫的是:

For i As Integer = 0 To LstOrderItems.Items.Count - 1 

至於你的數據庫錯誤你缺少兩個單引號。插入數據時,您必須用單引號括住VALUES()中的每個值。

例如:

INSERT INTO table_name (column1, column2, column3) VALUES('column1 value', 'column2 value', 'column3 value') 

因此,要改正錯誤,你必須添加這些單引號,以及:

cmd1.CommandText = ("insert into RestaurantData ([Food Order]) VALUES('" + vari1 + "')") 

雖然你真的應該考慮Parameterized queries(又名預處理語句),因爲你的代碼容易受到SQL Injection的影響。

有關更多信息,請參閱How do I create a parameterized SQL query? Why Should I?

+0

這就是我之前所做的,但是現在它回去說查詢表達式中的'語法錯誤(缺少運算符)' – Matthew

+1

@Mthethe:這與您的數據庫查詢有關,而不是循環。上面顯示的是迭代ListBox的每一項的正確方法之一。 –

+0

@Matthew:我已經更新了我的答案,並修復了數據庫查詢。 –

相關問題