Bueno, lo prometido es deuda.
Prueba con este procedimiento a "GuardarEnTabla" le pasas como prámetros la conexión que ya tienes abierta y la consulta.
Código:
Private Sub GuardarEnTabla(ByVal Con As SqlConnection, ByVal StrQry As String)
Dim i As Integer
Try
Con.Open()
Dim Cmd As New SqlCommand(StrQry, Con)
' creamos un reader con los datos de la consulta
Dim Reader As SqlDataReader = Cmd.ExecuteReader
Dim sql As String = ""
' leemos el reader y vamos ejecutando la consulta
While Reader.Read
sql = "INSERT INTO Facturacion ("
For i = 0 To Reader.FieldCount - 1
sql = sql & Reader.GetName(i) & ","
Next
' quitar la última coma
sql = Microsoft.VisualBasic.Left(sql, Len(sql) - 1)
sql = sql & ") VALUES ('"
For i = 0 To Reader.FieldCount - 1
sql = sql & Reader(i) & "','"
Next
' eliminar los dós últimos caracteres
sql = Microsoft.VisualBasic.Left(sql, Len(sql) - 2)
sql = sql & ")"
EjecutarInsert(sql)
End While
Reader.Close()
Catch ex As Exception
MsgBox(ex.Message.ToString)
End Try
End Sub
Private Sub EjecutarInsert(ByVal sSQL As String)
Try
' creamos una nueva conexión a la BD
' nota: Pon la misma cadena de conexión que tenías antes
Dim cone As New SqlConnection("MiCadenadeConexion")
cone.Open()
Dim cdo As New SqlCommand(sSQL, cone)
cdo.ExecuteNonQuery()
Catch ex As Exception
MsgBox(ex.Message.ToString)
End Try
End Sub