[英]How to input multiple ComboBox values into Access Database from Visual Studio via VB.net
With the current code that I am running no errors occur, but no data gets added to the Microsoft Access DB. 使用我正在运行的当前代码,不会发生任何错误,但是不会将任何数据添加到Microsoft Access DB。 It only uploads the data to the DB if 2 or less of the ComboBoxes are included in the code.
如果代码中包含2个或更少的ComboBox,则仅将数据上载到DB。 This has me very confused.
这让我很困惑。 I have tried ComboBox1.SelectedItem.ToString, ComboBox1.SelectedItem.Text, and ComboBox1.Text and similar issues arise for all of them.
我尝试了ComboBox1.SelectedItem.ToString,ComboBox1.SelectedItem.Text和ComboBox1.Text,所有这些问题都出现了类似的问题。 Any ideas?
有任何想法吗?
Imports System.Data.OleDb
Public DefineDataFile As String
Dim provider As String
Dim dataFile As String
Dim connString As String
Dim myConnection As OleDbConnection = New OleDbConnection
provider = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
dataFile = "XXXXXXXXXXXXX.mdb"
connString = provider & dataFile
myConnection.ConnectionString = connString
myConnection.Open()
Dim str As String
str = "INSERT INTO [Panels/Equipment] ([Panel/Equipment Name], [Machine Name], [Panel/Equipment #], [Type], [Functional Location], [Facility], [Category], [Lifetime Cost Savings], [Hours Per Day], [Days Per Week], [Weeks Per Year], [Description], [Environmental Condition], [Environmental Option], [Environmental Finding], [Heating/Cooling Condition], [Heating/Cooling Option], [Heating/Cooling Finding], [Wiring Condition], [Wiring Option], [Wiring Finding], [Machines ID])"
str += "SELECT ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,[Machines].[Machines ID]"
str += "FROM [Machines] WHERE [Machines].[Machine Name] = ? "
Dim cmd As OleDbCommand = New OleDbCommand(str, myConnection)
cmd.Parameters.Add(New OleDbParameter("Panel/Equipment Name", CType(TextBox_Name.Text, String)))
cmd.Parameters.Add(New OleDbParameter("Machine Name", CType(TextBox_Machine.Text, String)))
cmd.Parameters.Add(New OleDbParameter("Panel/Equipment #", CType(TextBox_PENum.Text, String)))
* cmd.Parameters.Add(New OleDbParameter("Type", CType(ComboBox_Type.SelectedItem.Text, String)))
cmd.Parameters.Add(New OleDbParameter("Functional Location", CType(TextBox_FunctionalLocation.Text, String)))
cmd.Parameters.Add(New OleDbParameter("Facility", CType(TextBox_Facility.Text, String)))
* cmd.Parameters.Add(New OleDbParameter("Category", CType(ComboBox_Category.SelectedItem.Text, String)))
cmd.Parameters.Add(New OleDbParameter("Lifetime Cost Savings", CType(TextBox_LifetimeCostSavings.Text, String)))
cmd.Parameters.Add(New OleDbParameter("Hours Per Day", CType(TextBox_HoursPerDay.Text, String)))
cmd.Parameters.Add(New OleDbParameter("Days Per Week", CType(TextBox_DaysPerWeek.Text, String)))
cmd.Parameters.Add(New OleDbParameter("Weeks Per Year", CType(TextBox_WeeksPerYear.Text, String)))
* cmd.Parameters.Add(New OleDbParameter("Priority", CType(ComboBox_Priority.SelectedItem.Text, String)))
cmd.Parameters.Add(New OleDbParameter("Description", CType(TextBox_Description.Text, String)))
* cmd.Parameters.Add(New OleDbParameter("Environmental Condition", CType(ComboBox_EC.SelectedItem.Text, String)))
* cmd.Parameters.Add(New OleDbParameter("Environmental Option", CType(ComboBox_EO.SelectedItem.Text, String)))
* cmd.Parameters.Add(New OleDbParameter("Environmental Finding", CType(ComboBox_EF.SelectedItem.Text, String)))
* cmd.Parameters.Add(New OleDbParameter("Heating/Cooling Condition", CType(ComboBox_HCC.SelectedItem.Text, String)))
* cmd.Parameters.Add(New OleDbParameter("Heating/Cooling Option", CType(ComboBox_HCO.SelectedItem.Text, String)))
* cmd.Parameters.Add(New OleDbParameter("Heating/Cooling Finding", CType(ComboBox_HCF.SelectedItem.Text, String)))
* cmd.Parameters.Add(New OleDbParameter("Wiring Condition", CType(ComboBox_WC.SelectedItem.Text, String)))
* cmd.Parameters.Add(New OleDbParameter("Wiring Option", CType(ComboBox_WO.SelectedItem.Text, String)))
* cmd.Parameters.Add(New OleDbParameter("Wiring Finding", CType(ComboBox_WF.SelectedItem.Text, String)))
* cmd.Parameters.Add(New OleDbParameter("Machine ID", CType(ComboBox_Machine.SelectedItem.ToString, String)))
Try
cmd.ExecuteNonQuery()
cmd.Dispose()
myConnection.Close()
MsgBox("Panel/Equipment Successfully Added")
Catch ex As Exception
MsgBox(ex.Message)
End Try
myConnection.Close()
Why are you converting a text to a string? 为什么要将文本转换为字符串? In
CType(TextBox_Name.Text, String)
the expression TextBox_Name.Text
is a string already. 在
CType(TextBox_Name.Text, String)
,表达式TextBox_Name.Text
已经是字符串。 Simply write 只需写
cmd.Parameters.Add(New OleDbParameter("Panel/Equipment Name", TextBox_Name.Text))
For the other parameters, you must provide a value of a type which matches the type in the table column. 对于其他参数,您必须提供与表列中的类型匹配的类型的值。 Eg If Machine ID in Access is a Numeric Long (32-bit), write
例如,如果Access中的计算机ID为数字长(32位),请写入
cmd.Parameters.Add(New OleDbParameter("Machine ID", _
CType(ComboBox_Machine.SelectedItem, Integer))) 'Integer in VB is 32-bit
Also you have 21 ?
你也有21
?
but are inserting 23 Parameters. 但要插入23个参数。 The
Priority
parameter seems to be wrong. Priority
参数似乎是错误的。 Since you insert the Machine ID
directly in the INSERT, you should not add a parameter for it but instead one for Machine Name
in the where clause. 由于您将
Machine ID
直接插入INSERT中,因此您不应为其添加参数,而应在where子句中为Machine Name
添加一个参数。
The SelectedItem
property of the ComboBox
returns an Object
. ComboBox
的SelectedItem
属性返回一个Object
。 An object does not contain a property Text
. 对象不包含属性
Text
。 What kind of objects do the combo boxes contain? 组合框包含哪些对象? If you added strings, then
SelectedItem
is a string already. 如果添加了字符串,则
SelectedItem
已经是一个字符串。 Eg 例如
cmd.Parameters.Add(New OleDbParameter("Type", ComboBox_Type.SelectedItem))
Also I recommend you to use the project option Strict On
in VB, as this shows you coding errors that are not shown otherwise. 另外,我建议您在VB中使用项目选项
Strict On
,因为这将显示编码错误,否则将不会显示。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.