Importar de un datagrid a mysql

Disculpa pero tengo problemas con insertar datos en mi tabla en mysql tengo el siguiente código el cual recorre mi datagrid el cual contiene lo datos que voy a insertar
'Definimos dos arrays de String, C,f y t, que contendrn, respectivamente, los
'campos(fields), las filas que la consulta devolver y la tablas sobre las que se ejecutar.
Dim C As String = "", f As String = ""
Dim t As String = TABLASBD.Text ' un combobox donde seleccionamos la tabla de mi bd
' Cuantas columnas y cuantas filas?
Dim NCol As Integer = DataGrid1.ColumnCount
Dim NRow As Integer = DataGrid1.RowCount
Dim da As New MySQLDataAdapter("SELECT * FROM" & t, conexion)
'Aqui recorremos todas las filas, y por cada fila todas las columnas y vamos escribiendo.
For i As Integer = 1 To NCol
If i - 1 = 0 Then
C = C + DataGrid1.Columns(i - 1).Name.ToString() 'esto es para nombre de las columnas
Else
C = C + "," + DataGrid1.Columns(i - 1).Name.ToString() 'esto es para las columnas pero a partir de la segunda
End If
Next
For Fila As Integer = 0 To NRow - 1 'recorre cada fila
For Col As Integer = 0 To NCol - 1 'recorre la columna n de la fila x
If Col = 0 Then
f = f + DataGrid1.Rows(Fila).Cells(Col).Value.ToString ' esto es para los datos de las filas Else
f = f + DataGrid1.Rows(Fila).Cells(Col).Value.ToString ' esto es para los datos de las filas  'partir de la segunda col
End If
Next
'aqui ira el "INSERT INTO " & t & "(" & C & ") VALUES ("& f &")"
 Next
conexion.Close() 'Cerramos la conexin con el servidor
pero me marca problemas en f = f + DataGrid1.Rows(Fila).Cells(Col).Value.ToString lo que marca es esto "Referencia a objeto no establecida como instancia de un objeto." y ademas no se como implementar mi comando de insert para mi tabla de mysql.

1 respuesta

Respuesta
1
Vamos a primero terminar la lógica, el insert es un insert común con values como lo haces, depende la lógica de lo que quieres hacer es donde poner el insert.
 f = f + DataGrid1.Rows(Fila).Cells(Col).Value.ToString
no entiendo que queres guardar en F.
Explicame un poco la lógica de lo quieres hacer sin poner código, capaz que hay que pensar el problema por otro lado.
Lo que se supone es que para insertar la instrucción sql es así:
INSERT INTO nombre_tabla(campo1,campo2,...) VALUES (v1,v2,...)
Bueno en la primera parte si te das cuenta estoy ingresando datos a C recorriendo mi datagrid. C contiene el nombre de las columnas (campos)
En f quiero ingresar el dato de las filas cuando, pero en la segunda columna debo agregar "," para separarla y coincida con la instrucción de sql (v1, v2). No se si me explique mejor en si lo que quiero es ingresar todos mis datos del datagrid a una tabla que tengo en mysql.
Esa idea de recorrer el datagrid me la dieron ya que desde un principio lo que hago es que tengo un archivo .xls el cual tiene los datos que voy a ingresar a mi tabla. En si mi aplicación se trata de exportar de excel a mysql
El datagrid tiene filas con columnas
Si vos pones en f un solo campo el insert te queda fuera de programación.
Hay que cambiar el modo de ver el insert, los string que usas de c y f
y en el insert tienes que poner así
siempre y considerando que la tabla es la misma.
insert into T (campo1,campo2) values (datagrid(columna0, fila i (del for), datagrid(columna1, fila i del for) y asi con todos.
La tabla la sacas con la variable t, los campos con la variable C (yo pondira un vector),
y los demás campos es en la fila que esta el for con las columnas establecidas
saludos
leandro
Mira lo que pasa es que yo voy a poder importar a varias tablas por lo que los campos no son iguales ya no me marca ese error modifique algo y funciono pero ahora tengo esto
''Aqui recorremos todas las filas, y por cada fila todas las columnas y vamos escribiendo.
For i As Integer = 1 To NCol
If i - 1 = 0 Then
C = C + Data.Columns(i - 1).Name.ToString() 'esto es para nombre de las columnas
Else
C = C + "," + Data.Columns(i - 1).Name.ToString() 'esto es para las columnas pero a partir de la segunda
End If
Next
For Fila As Integer = 0 To NRow - 1 'recorre cada fila
For Col As Integer = 0 To NCol - 1 'recorre la columna n de la fila x
If Data.Rows(Fila).Cells(0).Value = Nothing Then ' para checar q no este vacia la fila
Exit For
Else
If Col = 0 Then
f = "'" + DataGrid1.Rows(Fila).Cells(Col).Value.ToString + "'" ' esto es para los datos de las filas ' para las filas row=fila y cell=columna
Else
f = f + ",'" + DataGrid1.Rows(Fila).Cells(Col).Value.ToString + "'" ' esto es para los datos de las filas ' para las filas row=fila y cell=columna
End If 'fin de las col
End If ' fin de nothing
Next 'fin de recorrer columnas
ICM = New MySQLCommand("INSERT INTO " & t & "(" & C & ") VALUES (" & f & ")", conexion) ' se insertan los valores a la tabla de mi bd
ICM.ExecuteNonQuery()
f = ""
Next ' fin de recorrer filas
Pero el error q ahora me marca  es doesn't match value count at row 1 INSERT INTO nom_tabla me imagino q es por el tipo de datos (integer,float,etc) no se como hacerle para q coincidan tu sabras?
Si el error te dio en el insert into pone un freno y pasa la consulta en ventana de inmediato
Para que veas los datos que estas pasando a la base de datos.
Por eso te decía de la complicación de pasar datos sin saber la tabla, trata de pasarlo siempre como string. Creo que no tendrías que tener problemas.
Así como traes el nombre del campo, creo que también podes saber que tipo de datos es y ahí hacerle algo para que coincida con los datos que importas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas