【发布时间】:2017-08-12 17:20:14
【问题描述】:
我正在尝试学习如何在 VB.NET 中使用 Access,所以我尝试使用 Access 数据库制作一个简单的应用程序,该数据库可以用作字典,有人可以在数据库中添加一些单词,然后他可以搜索它们.
我的数据库包含两张表,一张是 Word |描述和另一个用Word |同义词
问题是一个词可能有多个同义词,所以我想我可以在文本框中输入所有同义词并使用 Regex.Split(" ") 将它们拆分并插入循环中。这可以用 OleDbParameters 完成吗? 这是我到目前为止所做的,但它只插入最后一条记录:
str = "insert into Synonyms ([Word],[Synonym]) values (@word,@synonym)"
cmd = New OleDbCommand(str, myConnection)
cmd.Parameters.Add(New OleDbParameter("Word", CType(txtWord.Text,
String)))
cmd.Parameters.Add("@synonym", OleDbType.VarChar)
Dim syn As String() = Regex.Split(txtSynonyms.Text, " ")
Dim i As Integer = 0
While i < syn.Length()
cmd.Parameters("@synonym").Value = syn(i)
i = i + 1
End While
Try
cmd.ExecuteNonQuery()
cmd.Dispose()
MsgBox("Synonyms for word """ & txtWord.Text & """ added")
txtWord.Clear()
txtSynonyms.Clear()
Catch ex As Exception
MsgBox(ex.Message)
End Try
【问题讨论】:
-
您在循环中覆盖参数,然后只执行一次查询。如果要多次执行查询,请在循环中执行。
-
您只需将 cmd.ExecuteNonQuery 移动到遍历同义词数组的 while 循环中。在每个循环中插入数据。
-
也不确定使用 Regex.Split 对简单 string.Split 有什么好处
-
@Steve 我不知道移动 cmd.ExecuteNonQuery 是否意味着移动整个 Try Catch,我试过了,但我收到一条消息“ExecuteNonQuerry:连接属性尚未初始化”
-
一行,就一行。关于连接。您需要在执行任何操作之前打开它。从您的代码中不清楚您是否在 ExecuteNonQuery 之前打开连接