2017-06-14 2 views
1

Ich habe ein Problem beim Ausführen einer Merge-Abfrage von zu aktualisieren oder Werte aus einer DataGridView Tabelle in eine SQL-Server-Datenbanktabelle. Hier ist mein Code unten, es gibt mir keine Fehler oder Unterbrechungen, aber ich habe kürzlich festgestellt, dass es vollständig Zeilen in meiner Datenbanktabelle dbo.schedule erstellt hat, die alle NULL Werte enthalten, auch diese Schlüsselposition könnte jemand bitte hilf mir? Ich bin nicht sehr vertraut mit Merge-Abfragen in SQL so wenden Sie sich bitte Probleme mit meiner Syntax hinweisen:Frage von Datagridview zu Datenbank nicht zusammenführen sql, vb.net

Dim query As String = String.Empty 


query &= "DECLARE @TaskID nvarchar(8), @Task nvarchar(50), @Start_date datetime, @Due_date datetime, @Complete bit, @Task_Manager nvarchar(8), @JRID nvarchar(10), @Entered_By char(50), @Time_Entered datetime;" 
query &= "MERGE INTO schedule USING (VALUES (@TaskID, @Task, @start_date, @Due_Date, @Complete, @Task_Manager, @JRID, @Entered_By, @Time_Entered)) AS t(TaskID, Task, start_date, Due_Date, Complete, Task_Manager, JRID, Entered_By, Time_Entered) " 
query &= "ON schedule.TaskID = @TaskID WHEN MATCHED THEN" 
query &= " UPDATE SET schedule.TaskID = t.TaskID, schedule.Task=t.Task, schedule.start_date=t.start_date, schedule.due_date=t.due_date, schedule.complete=t.complete, schedule.task_manager=t.task_manager, " 
query &= "schedule.JRID=t.JRID, schedule.Entered_by=t.Entered_by, schedule.Time_Entered=t.Time_Entered" 
query &= " WHEN NOT MATCHED THEN INSERT (TaskID, Task, start_date, Due_Date, Complete, Task_Manager, JRID, Entered_By, Time_Entered)" 
query &= " VALUES (@TaskID, @Task, @start_date, @Due_Date, @Complete, @Task_Manager, @JRID, @Entered_By, @Time_Entered);" 


Using conn As New SqlConnection(dbLocations(0, 1)) 
    Using comm As New SqlCommand() 
     With comm 
      For Each row As DataGridViewRow In MainSchedule.DataGridView1.Rows 
       If Not (row.Cells(0).Value = Nothing) Then 
        .Parameters.Clear() 
        .Connection = conn 
        .CommandType = CommandType.Text 
        .CommandText = query 
        insertcommand.Parameters.AddWithValue("@TaskID", TNn) 
        insertcommand.Parameters.AddWithValue("@Complete", "False") 
        insertcommand.Parameters.AddWithValue("@Task", row.Cells(0).Value) 
        insertcommand.Parameters.AddWithValue("@Start_date", row.Cells(1).Value) 
        insertcommand.Parameters.AddWithValue("@Due_Date", row.Cells(2).Value) 
        insertcommand.Parameters.AddWithValue("@JRID", txtJRID.Text) 
        insertcommand.Parameters.AddWithValue("@Task_Manager", row.Cells(3).Value) 
        insertcommand.Parameters.AddWithValue("@Entered_By", GetUserName()) 
        insertcommand.Parameters.AddWithValue("@Time_Entered", Now) 
        NextTask() 
       End If 
      Next 
     End With 
     conn.Open() 
     comm.ExecuteNonQuery() 
    End Using 
End Using 

Antwort

1

ich es im Fall, dass jemand herausgefunden frage mich, hier ist mein neuer Code:

Connexion.Open() 
       Dim query As String = String.Empty 
       Dim keypos = 0 

       query &= "UPDATE schedule SET Task = @Task, Complete = @Complete, Start_date = @Start_date, " 
       query &= "Due_date = @Due_date, JRID = @JRID, Task_Manager = @Task_Manager, Entered_By = @Entered_By, Time_Entered = @Time_Entered " 
       query &= "WHERE TaskID = @TaskID " 
       query &= "IF @@ROWCOUNT = 0 INSERT INTO schedule (TaskID, Task, start_date, Due_Date, Complete, Task_Manager, JRID, Entered_By, Time_Entered)" 
       query &= " VALUES (@TaskID, @Task, @start_date, @Due_Date, @Complete, @Task_Manager, @JRID, @Entered_By, @Time_Entered);" 

       For Each row As DataGridViewRow In MainSchedule.DataGridView1.Rows 
        If Not (row.Cells(0).Value = Nothing) Then 
         insertcommand.Parameters.Clear() 
         insertcommand.CommandText = query 
         insertcommand.Parameters.AddWithValue("@TaskID", row.Cells(0).Value) 
         insertcommand.Parameters.AddWithValue("@Complete", "False") 
         insertcommand.Parameters.AddWithValue("@Task", row.Cells(1).Value) 
         insertcommand.Parameters.AddWithValue("@Start_date", row.Cells(2).Value) 
         insertcommand.Parameters.AddWithValue("@Due_Date", row.Cells(3).Value) 
         insertcommand.Parameters.AddWithValue("@JRID", txtJRID.Text) 
         insertcommand.Parameters.AddWithValue("@Task_Manager", row.Cells(4).Value) 
         insertcommand.Parameters.AddWithValue("@Entered_By", GetUserName()) 
         insertcommand.Parameters.AddWithValue("@Time_Entered", Now) 
         insertcommand.ExecuteNonQuery() 
        End If 
        keypos = keypos + 1 
       Next 

       Connexion.Close()