2017-07-05 26 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:我已经更新了我的答案,并修复了数据库查询。 –

相关问题