none
Me aprece un error que no se como solucionar RRS feed

  • Pregunta

  • La cuestión es que tengo un problema con mi código el cual lo que hace es guardar los datos de un datagrid en una base de datos en sqlserver el tema es que me guarda la primera parte que es la "id" pero cuando tiene que guardar la parte de "nombre" me da el siguiente error ya intente de todo

    
    database1DataSet1.Alumnos.IdColumn.ColumnName = Convert.ToString(alumnosDataGridView.Columns[e.ColumnIndex].Name == "Id");
                    database1DataSet1.Alumnos.NombreColumn.ColumnName = Convert.ToString(alumnosDataGridView.Columns[e.ColumnIndex].Name == "Nombre");
                    database1DataSet1.Alumnos.ApellidoColumn.ColumnName = Convert.ToString(alumnosDataGridView.Columns[e.ColumnIndex].Name == "Apellido");
                    database1DataSet1.Alumnos.Primera_NotaColumn.ColumnName = Convert.ToString(alumnosDataGridView.Columns[e.ColumnIndex].Name == "Primera_Nota");
                    database1DataSet1.Alumnos.Segunda_NotaColumn.ColumnName = Convert.ToString(alumnosDataGridView.Columns[e.ColumnIndex].Name == "Segunda_Nota");
                    database1DataSet1.Alumnos.Tercera_NotaColumn.ColumnName = Convert.ToString(alumnosDataGridView.Columns[e.ColumnIndex].Name == "Tercera_Nota");
                    database1DataSet1.Alumnos.Promedio_FinalColumn.ColumnName = Convert.ToString(alumnosDataGridView.Columns[e.ColumnIndex].Name == "Promedio_Final");

    Espero puedan ayudarme desde ya muchas gracias jeje

    sábado, 22 de junio de 2019 3:42

Respuestas

  • No comprendo la lógica de lo que estás haciendo. Es algo que no puede funcionar, no es de extrañar que produzca un error. Fíjate por ejemplo en esta línea:

    database1DataSet1.Alumnos.NombreColumn.ColumnName = Convert.ToString(alumnosDataGridView.Columns[e.ColumnIndex].Name == "Nombre");

    Ahí tomas una columna del alumonosDataGridView, definida por su índice, y después preguntas por el nombre de la columna usando .Name. Entonces comparas ese nombre con el texto "Nombre". El resultado de la comparación es el valor booleano false porque esa columna no se llama "Nombre". Entonces le aplicas un Convert.ToString a ese valor booleano y te devuelve la cadena "False". Después le asignas ese texto "False" al nombre de la columna NombreColumn, con lo que cambias el nombre de la columna para que se llame "False". Lógicamente en cuanto haces esto con dos columnas distintas te da un error porque no pueden existir dos columnas que se llamen igual.

    Así que algo no es coherente en lo que estás haciendo. ¿Por qué estás manipulando los nombres de las columnas? ¿Qué es lo que intentas conseguir?

    Fíjate también que en todas las sentencias de tu código preguntas por la columna número e.ColumnIndex, por lo que todas las filas se refieren a la misma columna del datagridview, que tampoco parece muy razonable: esto lo haces en el Cell_Click por lo que cada vez que haces un click en una celda accedes tomas la columna del gridview y la metes en todas las columnas del datatable. Algo no está bien pensado aquí.

    sábado, 22 de junio de 2019 5:55
    Moderador
  • Hola, para insertar datos debería hacer algo asi

    database1DataSet1.Alumnos["NombreColumn"] = Convert.ToString(alumnosDataGridView.Columns[e.ColumnIndex].Name);


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    lunes, 24 de junio de 2019 11:10
    Moderador
  • Lo primero revisar cuál es la cadena de conexión (ponla aquí en el foro si no sabes interpretarla), no vaya a ser que la base de datos esté en modo "instancia de usuario", en cuyo caso habría que ver si es que el archivo es realmente de solo-lectura (que podría ser porque esté marcado como solo-lectura en el sistema de archivos, pero también puede ser porque esté en una carpeta de solo lectura o porque el usuario solo tenga permiso para leerlo).

    Pero si no está en modo instancia de usuario, entonces habría que ver cómo está la base de datos en el servidor. Una captura de pantalla de la base de datos tal como se ve en SSMS nos daría una idea si este es el caso.

    lunes, 24 de junio de 2019 17:42
    Moderador

Todas las respuestas

  • No comprendo la lógica de lo que estás haciendo. Es algo que no puede funcionar, no es de extrañar que produzca un error. Fíjate por ejemplo en esta línea:

    database1DataSet1.Alumnos.NombreColumn.ColumnName = Convert.ToString(alumnosDataGridView.Columns[e.ColumnIndex].Name == "Nombre");

    Ahí tomas una columna del alumonosDataGridView, definida por su índice, y después preguntas por el nombre de la columna usando .Name. Entonces comparas ese nombre con el texto "Nombre". El resultado de la comparación es el valor booleano false porque esa columna no se llama "Nombre". Entonces le aplicas un Convert.ToString a ese valor booleano y te devuelve la cadena "False". Después le asignas ese texto "False" al nombre de la columna NombreColumn, con lo que cambias el nombre de la columna para que se llame "False". Lógicamente en cuanto haces esto con dos columnas distintas te da un error porque no pueden existir dos columnas que se llamen igual.

    Así que algo no es coherente en lo que estás haciendo. ¿Por qué estás manipulando los nombres de las columnas? ¿Qué es lo que intentas conseguir?

    Fíjate también que en todas las sentencias de tu código preguntas por la columna número e.ColumnIndex, por lo que todas las filas se refieren a la misma columna del datagridview, que tampoco parece muy razonable: esto lo haces en el Cell_Click por lo que cada vez que haces un click en una celda accedes tomas la columna del gridview y la metes en todas las columnas del datatable. Algo no está bien pensado aquí.

    sábado, 22 de junio de 2019 5:55
    Moderador
  • lo que yo intento hacer es que lo que yo ingreso en el datagrid me lo guarde  en la base de datos haciendo click en un boton "Guardar" dentro del datagrid por eso el evento Cell_Click al principio del codigo donde dice:

    database1DataSet1.Alumnos.NombreColumn.ColumnName = Convert.ToString(alumnosDataGridView.Columns[e.ColumnIndex].Name == "Nombre");

    intento que en la columna Nombre de la tabla Alumnos me guarde el dato que contiene la celda del datagrid en la coumna Nombre

    lunes, 24 de junio de 2019 10:04
  • Hola, para insertar datos debería hacer algo asi

    database1DataSet1.Alumnos["NombreColumn"] = Convert.ToString(alumnosDataGridView.Columns[e.ColumnIndex].Name);


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    lunes, 24 de junio de 2019 11:10
    Moderador
  • ahora me aparece un error que dice que la base de datos es de solo lectura como le cambio ese atributo para que deje de ser de solo lectura???

    lunes, 24 de junio de 2019 16:52
  • Lo primero revisar cuál es la cadena de conexión (ponla aquí en el foro si no sabes interpretarla), no vaya a ser que la base de datos esté en modo "instancia de usuario", en cuyo caso habría que ver si es que el archivo es realmente de solo-lectura (que podría ser porque esté marcado como solo-lectura en el sistema de archivos, pero también puede ser porque esté en una carpeta de solo lectura o porque el usuario solo tenga permiso para leerlo).

    Pero si no está en modo instancia de usuario, entonces habría que ver cómo está la base de datos en el servidor. Una captura de pantalla de la base de datos tal como se ve en SSMS nos daría una idea si este es el caso.

    lunes, 24 de junio de 2019 17:42
    Moderador