簡體   English   中英

如何通過VB.net從Visual Studio將多個ComboBox值輸入到Access數據庫中

[英]How to input multiple ComboBox values into Access Database from Visual Studio via VB.net

使用我正在運行的當前代碼,不會發生任何錯誤,但是不會將任何數據添加到Microsoft Access DB。 如果代碼中包含2個或更少的ComboBox,則僅將數據上載到DB。 這讓我很困惑。 我嘗試了ComboBox1.SelectedItem.ToString,ComboBox1.SelectedItem.Text和ComboBox1.Text,所有這些問題都出現了類似的問題。 有任何想法嗎?

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()

為什么要將文本轉換為字符串? CType(TextBox_Name.Text, String) ,表達式TextBox_Name.Text已經是字符串。 只需寫

cmd.Parameters.Add(New OleDbParameter("Panel/Equipment Name", TextBox_Name.Text))

對於其他參數,您必須提供與表列中的類型匹配的類型的值。 例如,如果Access中的計算機ID為數字長(32位),請寫入

cmd.Parameters.Add(New OleDbParameter("Machine ID", _
    CType(ComboBox_Machine.SelectedItem, Integer))) 'Integer in VB is 32-bit

你也有21 ? 但要插入23個參數。 Priority參數似乎是錯誤的。 由於您將Machine ID直接插入INSERT中,因此您不應為其添加參數,而應在where子句中為Machine Name添加一個參數。

ComboBoxSelectedItem屬性返回一個Object 對象不包含屬性Text 組合框包含哪些對象? 如果添加了字符串,則SelectedItem已經是一個字符串。 例如

cmd.Parameters.Add(New OleDbParameter("Type", ComboBox_Type.SelectedItem))

另外,我建議您在VB中使用項目選項Strict On ,因為這將顯示編碼錯誤,否則將不會顯示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM