2016-05-26 3 views
1

Ich habe eine DatagridView mit einer Checkboxcolumn Mein Ziel ist es zu überprüfen, ob die Checked Row bereits in der Datenbank vorhanden ist, aber mein Code gibt mir nicht die gewünschte Ausgabe. Was ist los mit dir?Überprüfen Sie, ob die in DataGridview eingecheckte Zeile in der Datenbank existiert

Hier ist es

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
     Dim conn As MySqlConnection = New MySqlConnection("datasource=localhost;database=operations;userid=root;password=admin1950;Convert Zero Datetime=True") 
     conn.Open() 
     Dim comm As MySqlCommand = New MySqlCommand() 
     comm.Connection = conn 
     Dim name As String 
     For i As Integer = 0 To Me.DataGridView1.Rows.Count - 1 Step 1 
      If Me.DataGridView1.Rows(i).Cells(0).Value = True Then 
       name = Me.DataGridView1.Rows(i).Cells(1).Value 
       comm.CommandText = "select ElecAssigned,ScheduleDate from assignments where ElecAssigned = '" & name & "' and ScheduleDate = @ScheduleDate" 
       comm.Parameters.AddWithValue("@ScheduleDate", DateTimePicker1.Value) 
       comm.ExecuteNonQuery() 
       Dim reader As MySqlDataReader 
       reader = comm.ExecuteReader 
       If reader.HasRows Then 
        MsgBox("The persons that you Selected is also Scheduled Today.") 
       End If 
      End If 
     Next 
    End Sub 

Hier ist das Szenario.

speichere ich ein Datum in der Tabelle assignments und es sieht so aus.

enter image description here

und hier ist das Szenario in dem Programm

enter image description here

ich eine Zeile in der Datagridview und wählen Sie in DateTimePicker ein Datum überprüft, die gleich in der meinem Tisch ist muss es sein Nachricht, die besagt: The selected Person is also Scheduled Today

Hier ist der Code

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
     Dim connection As New MySqlConnection("datasource=localhost;database=operations;userid=root;password=admin1950;Convert Zero Datetime=True") 
     Dim command As New MySqlCommand("SELECT COUNT(*) FROM Assignments WHERE ElecAssigned = @ElecAssigned AND ScheduleDate = @ScheduleDate", connection) 
     Dim parameter = command.Parameters.Add("@ElecAssigned", MySqlDbType.VarChar, 50) 

     command.Parameters.AddWithValue("@ScheduleDate", DateTimePicker1.Value) 

     connection.Open() 

     For Each row As DataGridViewRow In Me.DataGridView1.Rows 
      If CBool(row.Cells(0).Value) Then 
       parameter.Value = CStr(row.Cells(1).Value) 

       If CInt(command.ExecuteScalar()) > 0 Then 
        'Match found. 

       Else 
        MsgBox("The Personnel(s) you Selected is also Scheduled Today") 
        'No match found. 
        'Save It 
       End If 
      End If 
     Next 
    End Sub 

Unabhängig davon, wie viele ich wähle das Programm prüft, ob die ausgewählten Personen werden ebenfalls geprüft.

+0

Warum haben Sie einen Parameter für scheduledate, aber nicht nennen? –

+0

ich, dass der reale Wert von 'datetimepicker' zu überprüfen, denn wenn ich es in dem Befehl fügen Sie eine Fehlermeldung, falsches Datum Format hat –

+0

Das Update gut aussehen. In diesem Beispiel würde die IF-Bedingung dreimal (einmal für jede Zeile) ausgeführt werden und Ihr Datum und der Techniker an die Abfrage übergeben. Wenn die Abfrage> 0 zurückgibt, wurde diesem Techniker bereits dieses Datum zugewiesen. Führt der IF> 0 beim Debugging oder springt er zum else? Ist ein Datum oder ein Datum geplant? –

Antwort

1

Z.B.

Dim connection As New MySqlConnection("connection string here") 
Dim command As New MySqlCommand("SELECT COUNT(*) FROM Assignments WHERE ElecAssigned = @ElecAssigned AND ScheduledDate = @ScheduledDate", connection) 
Dim parameter = command.Parameters.Add("@ElecAssigned", MySqlDbType.VarChar, 50) 

command.Parameters.AddWithValue("@ScheduledDate", DateTimePicker1.Value.Date) 'Add a word Date to check only the Date 

connection.Open() 

For Each row As DataGridViewRow In Me.DataGridView1.Rows 
    If CBool(row.Cell(0).Value) Then 
     parameter.Value = CStr(row.Cells(1).Value) 

     If CInt(command.ExecuteScalar()) > 0 Then 
      'Match found. 
     Else 
      'No match found. 
     End If 
    End If 
Next 

Sie könnten ein paar kleine Anpassungen erfordern, aber das ist im Grunde die Art und Weise, darüber zu gehen, wenn Sie individuell für jede Zeile geprüft wissen wollen.

+0

Warten Sie Sir Lassen Sie mich versuchen –

+0

TY für den Aufwand Sir es funktioniert nicht der Code kann das Spiel nicht finden –

+0

@PaulEdwardSanGabrielPagente haben Sie das versucht? Aktualisieren Sie Ihren Post, damit wir sehen können, was Sie in der IF-Anweisung tun. Sie müssen die Verbindung auch schließen, wenn Sie fertig sind. –

Verwandte Themen