0

Ich habe eine Datagridview Daten aus (t1) gelesen und ich mag Daten in einer anderen Tabelle speichern (T2) mit einem VerfahrenWenn ich versuche, von Datagridview zu einem anderen Daten aus der Tabelle zu speichern

create procedure [dbo].[saving_tasks] 
    @task1 nvarchar(50), 
    @task2 nvarchar(50), 
    @task3 nvarchar(50) 
as 
begin 
    insert into t2 (task1, task2, task3) 
    values (@task1, @task2, @task3) 
end 

enter image description here

und diesen Code mit dem speichern von Daten von (t1. col1) geprüft Zeilen (t2.task1 und t2.task2 und t2.task3)

Dim comm As New SqlCommand 
    comm.Connection = sqlconn 
    comm.CommandText = "saving_task" 
    comm.CommandType = CommandType.StoredProcedure 

    Dim i As Integer 
    For i = 0 To DGV1.Rows.Count - 1 
     If DGV1.Rows(i).Cells(0).Value = True Then 

      comm.Parameters.AddWithValue("task1", DGV1.Rows(i).Cells(1).Value) 
      comm.Parameters.AddWithValue("task2", DGV1.Rows(i).Cells(1).Value) 
      comm.Parameters.AddWithValue("task3", DGV1.Rows(i).Cells(1).Value) 
      'Else' 

     End If 

    Next 
    sqlconn.Open() 
    comm.ExecuteNonQuery() 
    sqlconn.Close() 
End Sub 

und wenn ich versuche ich auf der Linie erhalten Fehler zu speichern comm.ExecuteNonQuery()

+1

Könnten Sie den genauen Fehler messge erhalten? Und warum speichern Sie den Wert von Zellen (1) für jede Zeile? – Steve

Antwort

1

Der Hauptfehler in Ihrer Abfrage ist die Tatsache, dass Sie ExecuteNonQuery erst nach dem Ende der Schleife aufrufen. Dadurch wird der Befehl nur einmal und nicht für jede Zeile ausgeführt. Daher besteht die Hauptaufgabe darin, ExecuteNonQuery innerhalb der Schleife zu verschieben.

Wenn Sie jedoch versuchen, denselben Befehl für jede Zeile in Ihrem Grid erneut zu verwenden, müssen Sie vermeiden, denselben Parameter zu demselben Befehl hinzuzufügen. Sie müssen

comm.Parameters.Clear() 

aufrufen, bevor die gleichen Parameter in der Schleife hinzugefügt, aber Sie können auch die Parameter definieren, bevor die Schleife eintritt und nur den Wert an jedem

Dim comm As New SqlCommand 
comm.Connection = sqlconn 
comm.CommandText = "saving_task" 
comm.CommandType = CommandType.StoredProcedure 
comm.Parameters.Add("@task1", SqlDbType.NVarChar, 50)   
comm.Parameters.Add("@task2", SqlDbType.NVarChar, 50)  
comm.Parameters.Add("@task3", SqlDbType.NVarChar, 50)  
sqlconn.Open() 
Dim i As Integer 
For i = 0 To DGV1.Rows.Count - 1 
    If DGV1.Rows(i).Cells(0).Value = True Then 
     comm.Parameters("@task1").Value = DGV1.Rows(i).Cells(1).Value 
     comm.Parameters("@task2").Value = DGV1.Rows(i).Cells(2).Value 
     comm.Parameters("@task3").Value = DGV1.Rows(i).Cells(3).Value 
     comm.ExecuteNonQuery() 
    End If 
Next 
sqlconn.Close() 

(Beachten Sie, dass ich Schleife ändern Angenommen, Sie haben einen Tippfehler im Index der Zelle zu speichern)

+0

Ich rufe dieselbe Zelle, weil ich den Wert aus der gleichen Spalte aus der ersten Tabelle nehmen und diese Werte in einer Zeile in der zweiten Tabelle –

+0

speichern möchte, wenn ich diesen Code versuche: comm.Parameters ("@ task1"). Value = DGV1.Rows (1) .Cells (1) .Wert comm.Parameters ("@ task1"). Wert = DGV1.Rows (2) .Cells (1) .Wert Es funktioniert, aber ich möchte es laufen lassen Alle Zeilen, die ich überprüft habe –

+0

Das ist der Grund für Ihre Überprüfung der Zelle (0) Meinst du, dass der Code alle Zeilen auch die unchecked aktualisiert? – Steve

Verwandte Themen