2017-04-23 66 views
0

這部分代碼是讓講師發佈諮詢時間表,不幸的是我遇到了另一個錯誤,如標題所示,在Can anybody help me to solve this error "NullReferenceException was unhandled"?處完成提問後,該錯誤可能已解決。現在,我的問題是當我單擊發布按鈕時,就像將所有標籤(具有如表格中所示的顏色)保存到訪問文件,並且這些標籤已經聲明爲(lime = available,red = unavailable )。任何人都可以幫我解決這個錯誤「OleDbException未處理」?

This is the form

的錯誤是在昏暗˚F爲整數= cmd.ExecuteNonQuery()

Public Class ConsultationSchedule 

Private Sub publishbutton_Click(sender As Object, e As EventArgs) Handles publishbutton.Click 
    Dim label As String = "Label" 

    Dim time1 As String = vbNull 
    Dim time2 As String = vbNull 
    Dim time3 As String = vbNull 
    Dim time4 As String = vbNull 
    Dim time5 As String = vbNull 

    Dim day1 As String = vbNull 
    Dim day2 As String = vbNull 
    Dim day3 As String = vbNull 
    Dim day4 As String = vbNull 
    Dim day5 As String = vbNull 

    Dim available1 As String = vbNull 
    Dim available2 As String = vbNull 
    Dim available3 As String = vbNull 
    Dim available4 As String = vbNull 
    Dim available5 As String = vbNull 

    For i = 11 To 15 
     time1 = Label7.Text 

     For k = 16 To 20 
      time2 = Label8.Text 

      For t = 21 To 25 
       time3 = Label9.Text 

       For u = 26 To 30 
        time4 = Label10.Text 

        For bg = 33 To 37 
         time5 = Label32.Text 

        Next 
       Next 
      Next 
     Next 
    Next 

    For i = 11 To 37 
     If (i = 11) Then 
      day1 = Label2.Text 
      If Not Me.Controls(label & i.ToString) Is Nothing Then 
       If (Me.Controls(label & i.ToString).BackColor = Color.Lime) Then 
        available1 = "Available" 
       Else 
        available1 = "Unavailable" 
       End If 
      End If 

     ElseIf (i = 16) Then 
      day1 = Label2.Text 
      If Not Me.Controls(label & i.ToString) Is Nothing Then 
       If (Me.Controls(label & i.ToString).BackColor = Color.Lime) Then 
        available2 = "Available" 
       Else 
        available2 = "Unavailable" 
       End If 
      End If 

     ElseIf (i = 21) Then 
      day1 = Label2.Text 
      If Not Me.Controls(label & i.ToString) Is Nothing Then 
       If (Me.Controls(label & i.ToString).BackColor = Color.Lime) Then 
        available3 = "Available" 
       Else 
        available3 = "Unavailable" 
       End If 
      End If 

     ElseIf (i = 26) Then 
      day1 = Label2.Text 
      If Not Me.Controls(label & i.ToString) Is Nothing Then 
       If (Me.Controls(label & i.ToString).BackColor = Color.Lime) Then 
        available4 = "Available" 
       Else 
        available4 = "Unavailable" 
       End If 
      End If 

     ElseIf (i = 33) Then 
      day1 = Label2.Text 
      If Not Me.Controls(label & i.ToString) Is Nothing Then 
       If (Me.Controls(label & i.ToString).BackColor = Color.Lime) Then 
        available5 = "Available" 
       Else 
        available5 = "Unavailable" 
       End If 
      End If 
     End If 
    Next 
    For ht = 11 To 37 
     If (ht = 11) Then 
      day1 = Label2.Text 
     ElseIf (ht = 16) Then 
      day1 = Label2.Text 
     ElseIf (ht = 21) Then 
      day1 = Label2.Text 
     ElseIf (ht = 26) Then 
      day1 = Label2.Text 
     ElseIf (ht = 33) Then 
      day1 = Label2.Text 
     End If 
    Next 
    For k = 11 To 37 
     If (k = 12) Then 
      day2 = Label3.Text 
     ElseIf (k = 17) Then 
      day2 = Label3.Text 
     ElseIf (k = 22) Then 
      day2 = Label3.Text 
     ElseIf (k = 27) Then 
      day2 = Label3.Text 
     ElseIf (k = 34) Then 
      day2 = Label3.Text 
     End If 
    Next 
    For t = 11 To 37 
     If (t = 13) Then 
      day3 = Label4.Text 
     ElseIf (t = 18) Then 
      day3 = Label4.Text 
     ElseIf (t = 23) Then 
      day3 = Label4.Text 
     ElseIf (t = 28) Then 
      day3 = Label4.Text 
     ElseIf (t = 35) Then 
      day3 = Label4.Text 
     End If 
    Next 
    For u = 11 To 37 
     If (u = 14) Then 
      day4 = Label5.Text 
     ElseIf (u = 19) Then 
      day4 = Label5.Text 
     ElseIf (u = 24) Then 
      day4 = Label5.Text 
     ElseIf (u = 29) Then 
      day4 = Label5.Text 
     ElseIf (u = 36) Then 
      day4 = Label5.Text 
     End If 
    Next 
    For y = 11 To 37 
     If (y = 15) Then 
      day5 = Label6.Text 
     ElseIf (y = 20) Then 
      day5 = Label6.Text 
     ElseIf (y = 25) Then 
      day5 = Label6.Text 
     ElseIf (y = 30) Then 
      day5 = Label6.Text 
     ElseIf (y = 37) Then 
      day5 = Label6.Text 
     End If 
    Next 

    Dim sql As String 
    Dim sql2 As String 
    Dim sql3 As String 
    Dim sql4 As String 
    Dim sql5 As String 

    Dim cmd As OleDbCommand 
    Dim cmd2 As OleDbCommand 
    Dim cmd3 As OleDbCommand 
    Dim cmd4 As OleDbCommand 
    Dim cmd5 As OleDbCommand 

    Dim conn = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=scheduledatabase.accdb;Persist Security Info=False;") 
    sql = "INSERT INTO consultationschedule([Time], weekDay, Available)VALUES(@time1,@day1,@available1)" 
    sql2 = "INSERT INTO consultationschedule([Time], weekDay, Available)VALUES(@time2,@day2,@available2)" 
    sql3 = "INSERT INTO consultationschedule([Time], weekDay, Available)VALUES(@time3,@day3,@available3)" 
    sql4 = "INSERT INTO consultationschedule([Time], weekDay, Available)VALUES(@time4,@day4,@available4)" 
    sql5 = "INSERT INTO consultationschedule([Time], weekDay, Available)VALUES(@time5,@day5,@available5)" 

    Using (conn) 
     conn.Open() 
     cmd = New OleDbCommand(sql, conn) 
     cmd.Parameters.Add(New OleDbParameter("@Time", time1)) 
     cmd.Parameters.Add(New OleDbParameter("@weekDay", day1)) 
     cmd.Parameters.Add(New OleDbParameter("@Available", available1)) 
     cmd2 = New OleDbCommand(sql2, conn) 
     cmd2.Parameters.Add(New OleDbParameter("@Time", time2)) 
     cmd2.Parameters.Add(New OleDbParameter("@weekDay", day2)) 
     cmd2.Parameters.Add(New OleDbParameter("@Available", available2)) 
     cmd3 = New OleDbCommand(sql3, conn) 
     cmd3.Parameters.Add(New OleDbParameter("@Time", time3)) 
     cmd3.Parameters.Add(New OleDbParameter("@weekDay", day3)) 
     cmd3.Parameters.Add(New OleDbParameter("@Available", available3)) 
     cmd4 = New OleDbCommand(sql4, conn) 
     cmd4.Parameters.Add(New OleDbParameter("@Time", time4)) 
     cmd4.Parameters.Add(New OleDbParameter("@weekDay", day4)) 
     cmd4.Parameters.Add(New OleDbParameter("@Available", available4)) 
     cmd5 = New OleDbCommand(sql5, conn) 
     cmd5.Parameters.Add(New OleDbParameter("@Time", time5)) 
     cmd5.Parameters.Add(New OleDbParameter("@weekDay", day5)) 
     cmd5.Parameters.Add(New OleDbParameter("@Available", available5)) 

     Dim f As Integer = cmd.ExecuteNonQuery() 
     If (f >= 1) Then 
      ToolStrip1.Text += f.ToString & " record added successfully" 
     Else 
      ToolStrip1.Text += "Unable to add record" 
     End If 
    End Using 
End Sub 
+3

這條消息告訴你,拋出了一個你沒有捕獲到的異常。 *該異常*包含有關您正在查找的錯誤的信息。捕捉異常並找出該信息是什麼。 (如果我要猜測* ...您將15個參數添加到具有* 3 *的查詢中。) – David

+0

System.Data.dll中發生未處理的類型爲「System.Data.OleDb.OleDbException」的異常 附加信息:INSERT INTO語句中的語法錯誤。這是你正在談論的信息嗎? – bwraths

+0

如果我添加15個參數到一個有3個查詢,這是否意味着我需要添加更多不同名稱的查詢,包括我的數據庫? – bwraths

回答

2

我建議你創建一個記錄創建一個新方法:

Private Sub AddRecords(ByVal time As String, ByVal day As String, ByVal available As String) 

     Dim sql As String 
     Dim cmd As OleDbCommand 

     Dim conn = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=scheduledatabase.accdb;Persist Security Info=False;") 
     sql = "INSERT INTO consultationschedule(Time, weekDay, Available)VALUES(@Time,@weekDay,@Available)" 

     Using (conn) 
      conn.Open 
      cmd = New OleDbCommand(sql, conn) 
      cmd.Parameters.AddWithValue("@Time", time) 
      cmd.Parameters.AddWithValue("@weekDay", day) 
      cmd.Parameters.AddWithValue("@Available", available) 
      Dim f As Integer = cmd.ExecuteNonQuery() 
      If (f >= 1) Then 
       ToolStrip1.Text += f.ToString & " record added successfully" 
      Else 
       ToolStrip1.Text += "Unable to add record" 

      End If 
      MessageBox.Show("User Widrawed", "Widrawed", MessageBoxButtons.OK, MessageBoxIcon.Information) 
     End Using 
    End Sub 

後您可以調用添加記錄的方法

AddRecords(time1, day1, available1) 
AddRecords(time2, day2, available2) 
AddRecords(time3, day3, available3) 
AddRecords(time4, day4, available4) 
AddRecords(time5, day5, available5) 
+0

不幸的是,我沒有解決錯誤的運氣,我已經使用了您提供的代碼,並將其替換爲整個方法,並且我還將其他sql2添加到了5中。請參閱上面編輯的我的帖子。 – bwraths

+0

你可以試試這個: cmd.Parameters.Add(新OleDbParameter( 「@時間」,時間)) –

+0

[這是訪問數據庫] [1] [1]:http://imgur.com/a/CW5gE – bwraths

相關問題