2017-04-23 5 views
0

講演者が相談のスケジュールを公開できるようにすることです。質問にはCan anybody help me to solve this error "NullReferenceException was unhandled"?という質問をした後、残念ながらタイトルに示されているような別のエラーが発生し、そのエラーはおそらく解決されます。今、私の問題は、フォームに表示されているように色のついたすべてのラベルをアクセスファイルに保存しているような公開ボタンをクリックしたときに、(lime = available、red = unavailable )。誰でも私がこのエラーを解決するのを助けることができます "OleDbExceptionは未処理"でしたか?

This is the form

エラーが整数= cmd.ExecuteNonQuery(として暗いfである)

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

メッセージは、キャッチしなかった例外がスローされたことを伝えています。 *その例外には、あなたが探しているエラーに関する情報が含まれています。例外をキャッチし、その情報が何であるかを調べます。 (私が*推測する* ... * 3 *を持つクエリに15個のパラメータを追加しています) – David

+0

System.Data.dllに 'System.Data.OleDb.OleDbException'型の未処理の例外が発生しました 追加情報:INSERT INTO文の構文エラーです。それはあなたが話しているメッセージですか? – bwraths

+0

3つのクエリに15個のパラメータを追加すると、データベースを含めて別の名前のクエリを追加する必要がありますか? – 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に追加しました。上記の私の投稿で編集してください。 cmd.Parameters.Add(新OleDbParameter( "@時間"、時間)) – bwraths

+0

あなたはこれを試みることができます/ a/CW5gE –

+0

[これは、アクセスデータベースである] [1] [1]:http://imgur.com – bwraths

関連する問題