First of all, you should use SQLCommand and Parameters to avoid sql injection as you use the SQLClient namespace. Try this as your Insert procedure.
Private Sub InsertSQL(ByVal param1 As String, ByVal param2 As String, ByVal param3 As String) Using sqlConn As New SqlConnection("ConnectionStringHere") Using sqlComm As New SqlCommand() sqlComm.Connection = sqlConn sqlComm.CommandType = CommandType.Text sqlComm.CommandText = "INSERT INTO theTable VALUES (@Param1,@Param2,@Param3,@Param4,@Param5)" With sqlComm.Parameters .AddWithValue("@Param1", param1) .AddWithValue("@Param2", param2) .AddWithValue("@Param3", param3) .AddWithValue("@Param4", Now) .AddWithValue("@Param5", Now) End With Try sqlConn.Open() sqlComm.ExecuteNonQuery() Catch ex As SqlException MsgBox(ex.Message.ToString, MsgBoxStyle.Exclamation, "Error No. " & ex.ErrorCode.ToString) Finally sqlConn.Close() End Try End Using End Using End Sub
Second, why do you prefer to use a DataTable to bind a DataGridView ? Well, here is another solution. It uses SQLDataReader , and you need to loop on it to put records in your grid.
Private Sub ReloadGrid(ByVal connectionString As String) Dim queryString As String = "Your Query Here" Using connection As New SqlConnection(connectionString) Dim command As New SqlCommand(queryString, connection) connection.Open() Dim reader As SqlDataReader = command.ExecuteReader() DataGridView1.Rows.Clear() ' Clear All Rows ' While reader.Read() ' Console.WriteLine(String.Format("{0}, {1}", reader(0), reader(1))) ' ' Insert the record in your datagrid ' Dim row As String() = New String() {reader(0).ToString, reader(1).ToString, reader(2).ToString} DataGridView1.Rows.Add(row) End While ' Call Close when done reading. ' reader.Close() End Using End Sub
John woo
source share