2017-04-23 98 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

相关问题