2016-05-31 3 views
-2

Könnte mir jemand sagen, wie man die Tabelle mit datagridview mit leerer Zelle aktualisiert? Ich habe ein Dateneingabeformular mit Datagridview mit zwei Spalten im Designer erstellt. Ich möchte einige Zellen einer Spalte leer lassen und leere Zellen als Null in der Tabelle speichern. Wenn es keine leeren Zellen sind, kann ich Datagridview-Inhalte in TabelleSo speichern Sie die leere Datenzelle von datagridview in die Datenbanktabelle

Dim thisConnection As New SqlConnection() 
Dim nonqueryCommand As SqlCommand = thisConnection.CreateCommand() 

Try 
    ' Open Connection 
    thisConnection.Open() 
    Console.WriteLine("Connection Opened") 

    ' Create INSERT statement with named parameters 
    nonqueryCommand.CommandText = _ 
     "INSERT INTO myTable (Col1, Col2) VALUES (@Col1, @Col2)" 
    ' Add Parameters to Command Parameters collection 
    nonqueryCommand.Parameters.Add("@Col1", SqlDbType.VarChar, 50) 
    nonqueryCommand.Parameters.Add("@Col2", SqlDbType.VarChar, 50) 

    ' Prepare command for repeated execution 
    nonqueryCommand.Prepare() 

    ' Data to be inserted 
    For Each row As DataGridViewRow In DataGridView1.Rows 
    If Not row.IsNewRow Then 
     nonqueryCommand.Parameters("@Col1").Value = row.Cells(0).Value.ToString 
     nonqueryCommand.Parameters("@Col2").Value = row.Cells(1).Value.ToString 
    End If 
    Next 

    nonqueryCommand.ExecuteNonQuery() 

Catch ex As SqlException 
    ' Display error 
    Console.WriteLine("Error: " & ex.ToString()) 
Finally 
    ' Close Connection 
    thisConnection.Close() 
    Console.WriteLine("Connection Closed") 

End Try 

Ich weiß nicht zu speichern, wenn diese richtige Weg für leere Zelle, um zu überprüfen, ist in Tabelle zu speichern. Ich erhalte eine Fehlermeldung, wenn ich den Code zwischen Versuch und Fang ex Platz als SqlException Ein OleDbParameter mit Parameternamen ‚@ Col1‘ enthalten ist, nicht von diesem OleDbParameterCollection

If row.Cells(0).Value.ToString IsNot Nothing Then 
    nonqueryCommand.Parameters("@Col1").Value = row.Cells(0).Value.ToString() 
else 
    nonqueryCommand.Parameters("@Col1").Value = "0" 
end if 

Antwort

0

Sie zu viel zu tun mit Ihrem Einsatz. Alles, was Sie tun müssen, ist, Parameters.AddWithValue aufzurufen, aber der Schlüssel hier ist, Ihre Objektwerte in DB-übereinstimmenden Datentyp zu konvertieren. Unter der Annahme, beide Werte sind varchar und Nullable. Siehe Kommentare im Code

nonqueryCommand.CommandText = _ 
    "INSERT INTO myTable (Col1, Col2) VALUES (@Col1, @Col2)" 

' Prepare Parameters with correct Data Type 

nonqueryCommand.Parameters.AddWithValue("@Col1", String.Empty) 
nonqueryCommand.Parameters.AddWithValue("@Col2", String.Empty) 

For Each row As DataGridViewRow In DataGridView1.Rows 
    If Not row.IsNewRow Then 
     nonqueryCommand.Parameters(0).Value = 
      If(row.Cells(0).Value Is Nothing, DbNull.Value, row.Cells(0).Value.ToString()) 
     nonqueryCommand.Parameters(1).Value = 
      If(row.Cells(1).Value Is Nothing, DbNull.Value, row.Cells(0).Value.ToString()) 

     ' Here Execute your query for each row 
     If nonqueryCommand.ExecuteNonQuery() > 0 Then 
      Debug.WriteLine("Inserted Values") 
     End If 
    End If 
Next 

Das sollte alles sein, was Sie brauchen. HINWEIS - Sie müssen die Größe Ihrer Parameter nur dann einstellen, wenn Sie Ausgabeparameter haben. Bei der Eingabe wird die Größe automatisch festgelegt, wenn Sie einen Wert hinzufügen. Denken Sie jedoch daran, die Größe beim Abrufen der Zeichenfolge Daten vom Parameter festzulegen.

+0

Vielen Dank für Ihre Antwort. es funktioniert jetzt – alex

+0

@alex Funktioniert es von meiner Antwort? –

Verwandte Themen