none
insertar datos de un gridview a una base de datos mediante un boton [SOLUCIONADO]

    Pregunta

  • tengo un gridview que lleno con datos que provienen de un BD postgreSQL .... el tema es que todo lo que muestro en el gridview... quiero guardarlo en una tabla dentro de la base de datos....
    los datos se muestran en el gridview utilizando una Session ["datos"] = DT; //DataTable
    cree un boton en el form al que nombre "Guardar proyecto" y le sume un textbox en el que escribes el nombre con el que quieres guardar el proyecto dentro de la tabla en la BD (tabla que ya esta creada, con nombre "proyectos")
    bueno el tema es que quiero saber si puedo utilizar la variable Session que contiene los datos que estan en el gridview para insertarlos en la BD....

    saludos y gracias
    • Editado kaskodrilo jueves, 21 de enero de 2010 17:08
    martes, 19 de enero de 2010 16:32

Respuestas

  • hola

    si disculpa es que a veces por armar un ejemplo para explicar el cocnepto se olvida los detalles

    using (NpgsqlConnection conn = new NpgsqlConnection("connection string"))
    {
        conn.Open();

        DataTable dt = Session["datos"] as DataTable;
       
        string sql = @"INSERT INTO proyectos (Proyecto, Producto, Marca)
                                  VALUES (@proyecto, @producto, @marca)";

        foreach(DataRow row in dt.Rows)
        {
       
            NpgsqlCommand command = new Npgsql Command(sql, conn);
            command.Parameters.AddWithValue("proyecto", Convert.ToInt32(row["proyecto"] ));
            command.Parameters.AddWithValue("producto", Convert.ToString(row["producto"] ));
            command.Parameters.AddWithValue("marca", Convert.ToString(row["marca"] ));
           
            command.ExecuteNonQuery();
        }

    }

    como veras alli si esta usando la row del datatable para armar el query con parametros


    Nota, valida los tipos de datos a los que converti esto es solo un ejemplo verifica con el tipo de datos de la columna en la tabla

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta kaskodrilo martes, 19 de enero de 2010 18:55
    martes, 19 de enero de 2010 18:31
  • nunca e usado el Npgsql pero es similar al sqlclient , bueno te recomiedo dos cosas la primera es que arriba de  del foreach  pongas el conn.open()
    y al final del ciclo pongas el conn.close() cuando me refiero al final es fuera del ciclo, tambien en el  NpgsqlCommand command = new NpgsqlCommand(query);
     prueba poniedo  NpgsqlCommand command = new NpgsqlCommand(query,conn);
    saludos.

    y tambien en el Dataadapter da = conn.ConsultaDataAdapter(query,conn);

    a todo esto porque una DataAdapter?
    rellenaras un dataset?o un datatable ?
    • Marcado como respuesta kaskodrilo miércoles, 20 de enero de 2010 20:31
    miércoles, 20 de enero de 2010 20:13
  • gracias ARthemiaz hice lo que tu me dices y me da el siguiente error en el DataAdapter:

    da = conn.ConsultaDataAdapter (query, conn);

    Error    1    'Npgsql.NpgsqlConnection' no contiene una definición de 'ConsultaDataAdapter' ni se encontró ningún método de extensión 'ConsultaDataAdapter' que acepte un primer argumento de tipo 'Npgsql.NpgsqlConnection' (¿falta una directiva using o una referencia de ensamblado?) 

    saludos y gracias

     da = new NpgsqlDataAdapter(query, conn);
    cambia por eso.

    • Marcado como respuesta kaskodrilo miércoles, 20 de enero de 2010 20:31
    miércoles, 20 de enero de 2010 20:27
  • hola

    creo haber encontrado el problema te falta el ) final en el query

    igualmente te aconsejaria que pruebes con un codigo como este

    protected void Button3_Click(object sender, EventArgs e)//Guardar
    {

        string connectionstring = "Server=192.168.1.121;Port=5432;User Id=postgres;Timeout=60;ConnectionLifeTime=10;Pooling=false; Password=1234;Database=test_restore;";
       
        using(NpgsqlConnection con = new NpgsqlConnection(connectionstring))
        {
            con.Open();
           
            string query = @"INSERT INTO proyectos (Proyecto , productooriginal,
                                marcaoriginal, consumo, tipo, alimentacion,
                                montaje, perforacion, color, material,
                                descripcion, nota)
                            VALUES (@proyecto, @porducto, @marca,
                                @consumo, @tipo, @alimentacion, @montaje,
                                @perforacion, @color, @material, @descripcion, @nota)";

            DataTable dt = Session["datos"] as DataTable;
                               
            foreach (DataRow row in dt.Rows)
            {
                using(NpgsqlCommand command = new NpgsqlCommand(query, con))
                {
               
                    NpgsqlDataAdapter da = new NpgsqlDataAdapter(query, con);

                    command.Parameters.AddWithValue("proyecto", TextBox1.Text);
                    command.Parameters.AddWithValue("productooriginal", Convert.ToString(row["producto"]));
                    command.Parameters.AddWithValue("marcaoriginal", Convert.ToString(row["marca"]));
                    command.Parameters.AddWithValue("consumo", Convert.ToString(row["consumo"]));
                    command.Parameters.AddWithValue("tipo", Convert.ToString(row["tipo"]));
                    command.Parameters.AddWithValue("alimentacion", Convert.ToString(row["alimentacion"]));
                    command.Parameters.AddWithValue("montaje", Convert.ToString(row["montaje"]));
                    command.Parameters.AddWithValue("perforacion", Convert.ToString(row["perforacion"]));
                    command.Parameters.AddWithValue("color", Convert.ToString(row["color"]));
                    command.Parameters.AddWithValue("material", Convert.ToString(row["material"]));
                    command.Parameters.AddWithValue("descripcion", Convert.ToString(row["descripcion"]));
                    command.Parameters.AddWithValue("nota", Convert.ToString(row["nota"]));
                   
                    command.ExecuteNonQuery();
                }
            }
        }
       

    }

    como veras el using asegura el uso de los objetos de conexion
    y la idea ademas es usar un comand por cada fila sino podrias tener problemas la agregar los parametros de forma repetida

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta kaskodrilo jueves, 21 de enero de 2010 13:48
    jueves, 21 de enero de 2010 13:22
  • leandro tiene razon se refiere a esta linea    query = ("INSERT INTO proyectos (Proyecto , productooriginal, marcaoriginal, consumo, tipo, alimentacion, montaje, perforacion, color, material, descripcion, nota) VALUES ('" + TextBox1.Text + "', @porducto, @marca, @consumo, @tipo, @alimentacion, @montaje, @perforacion, @color, @material, @descripcion, @nota");


    modificala por   
    query = "INSERT INTO proyectos (Proyecto , productooriginal, marcaoriginal, consumo, tipo, alimentacion, montaje, perforacion, color, material, descripcion, nota) VALUES (@proyecto, @porducto, @marca, @consumo, @tipo, @alimentacion, @montaje, @perforacion, @color, @material, @descripcion, @nota)";
    • Marcado como respuesta kaskodrilo jueves, 21 de enero de 2010 13:48
    jueves, 21 de enero de 2010 13:29

Todas las respuestas

  • dijiste que tienes la Dt en una variable Session? en ese caso maneja esos datos de la variable Session ya que contienen los datos que requieres. y en el caso de que en la griwview muestre algunos datos espesificos de la Dt de la session y queras guardar esos datos , hace lo inverso Dt= grieview.datasource .
    martes, 19 de enero de 2010 16:44
  • la Dt la tengo en una variable session y contiene todos los datos que muestra el gridview y lo que quiero es tomar eso e insertarlo en la BD... no se si se podra utilizar una query INSERT y tomar los datos de la DT y meterlo dentro de la BD como un nuevo registro


    saludos y gracias por tu respuesta
    martes, 19 de enero de 2010 16:55
  • Si se puede con un insert, los datos estan y eso es lo unico que nesesitas saludos.



    que base de datos estas usando  ? sql ? acces?


     
    martes, 19 de enero de 2010 16:58
  • estoy usando PostgreSQL, utilizo Npgsql para poder accesar a ella.

    mi consulta seria

    pretendo crear un metodo llamado
    Insertar_datos (DataTable DT)
    {

    }
    en este metodo llamaria la DT de esta forma DataTable DT = Session["datos"] as DataTable;
    pero mi duda es como agregar un codigo que ejecute la query y que ademas le entrege los datos contenidos en esa DT
    String query = "Insert into proyectos [campos] VALUES..............................???"

    saludos
    martes, 19 de enero de 2010 17:05
  • hola

    asi es esa era la idea que uses al final el DataTable que tienes en Session para recorrerlo e insertar en la tabla

    por ahi deberias hacer un

    DataTable dt = Session["datos"] as DataTable;

    foreach(DataRow row in dt.Rows)
    {
       //aqui armas el insert
    }


    en realidad podrias ser algo como esto

    using (NpgsqlConnection conn = new NpgsqlConnection("connection string"))
    {
        conn.Open();

        DataTable dt = Session["datos"] as DataTable;
       
        string sql = @"INSERT INTO proyectos (campo1, campo2)
                                  VALUES (@param1, @param2)";
        foreach(DataRow row in dt.Rows)
        {
       
            NpgsqlCommand command = new Npgsql Command(sql, conn);
            command.Parameters.AddWithValue("param1", NextId);
            command.Parameters.AddWithValue("param2", nombre);
           
            command.ExecuteNonQuery();
        }

    }


    Nota, una aclaracion en este ejemplo solo se inserta el valor, pero si este ya existia previamente deberias actualizarlo
    salvo que la idea es simpre insertar y no actualziar previamente

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    martes, 19 de enero de 2010 17:27
  • gracias leandro mi consulta es la sgte

    string sql = @"INSERT INTO proyectos (campo1, campo2)
                                  VALUES (@param1, @param2)";

    si son varios campos............ en la query tendria que decir cuantos son.... me explico.... seria algo asi

    INSERT INTO proyectos (campo1, campo2, campo3.........etc) y lo mismo seria con los VALUES?

    por ende en esta linea
    command.Parameters.AddWithValue("param1", NextId);
    command.Parameters.AddWithValue("param2", nombre);

    tendria que agregar algo asi?

    command.Parameters.AddWithValue("param1", Proyecto);
    command.Parameters.AddWithValue("param2", revision);
    command.Parameters.AddWithValue("param2", Producto original);
    command.Parameters.AddWithValue("param3", Marcaoriginal);
    .
    .
    .
    .
    .
    etc

    seria asi o me equivoco?
    martes, 19 de enero de 2010 17:53
  • hola

    claro asi es exactamente


    Nota, un consejo se que por ahi lo has puesto a modo de ejemplo pero en los parametros usa nombre que referencien el nombre del parametro no uses param1..n usa un nombre que lo defina

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    martes, 19 de enero de 2010 17:56
  • te refieres a que lo deje VALUES "' + TextBox1 + '", param2...etc etc

    ya que el textbox1 es el que tiene el nombre del proyecto
    salu2
    martes, 19 de enero de 2010 18:00
  • gracias leandro mi consulta es la sgte

    string sql = @"INSERT INTO proyectos (campo1, campo2)
                                  VALUES (@param1, @param2)";

    si son varios campos............ en la query tendria que decir cuantos son.... me explico.... seria algo asi

    INSERT INTO proyectos (campo1, campo2, campo3.........etc) y lo mismo seria con los VALUES?

    por ende en esta linea
    command.Parameters.AddWithValue("param1", NextId);
    command.Parameters.AddWithValue("param2", nombre);

    tendria que agregar algo asi?

    command.Parameters.AddWithValue("param1", Proyecto);
    command.Parameters.AddWithValue("param2", revision);
    command.Parameters.AddWithValue("param2", Producto original);
    command.Parameters.AddWithValue("param3", Marcaoriginal);
    .
    .
    .
    .
    .
    etc

    seria asi o me equivoco?

    lo otro dato importante como es una DT y tienes mas de una fila Supuestamentente , no te servira el addwithvalue ,porque no? porque al estar en un ciclo insertado valores el parma1 en la primera intacia ya lo creaste y te dara error en el siguiente insert  , porque te dira que ya fue creado y usado, es mejor que uses directamente los parametros con el values ('"+ proyecto +"','"+ revision +"','"+ producto original+"','"+ marcaoriginal+"') acuerda que si es string el valor tiene que ir entre '' y adentro de eso le pones "+ variable  +" y en caso de numero es solo "& variable &"

    saludos.
    martes, 19 de enero de 2010 18:02
  • hola

    me refiero a que sea algo asi el query

    string sql = @"INSERT INTO proyectos (Proyecto, revision, Productooriginal, Marcaoriginal)
                                  VALUES (@proyecto, @revision, @producto, @marca)";


    veras como el nombre del campo es identificado por su parametro ya que llevan nombres que lo relacionan

    no te recomiendo concatenar texto para armar el query

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    martes, 19 de enero de 2010 18:03
  • a ver si entendi.... lo que dice ARthemiaz no se si estaria bueno ya que al ponerle en VALUES ('"+ proyecto +"','"+ revision +"','"+ producto original+"','"+ marcaoriginal+"') a mi parecer no estaria tomando los valores que estan en la DT o me equivoco? ya que ('"+ proyecto +"','"+ revision +"','"+ producto original+"','"+ marcaoriginal+"') son las columnas del gridview y no se si poner la query asi, esta llamara a los datos.

    string sql = @"INSERT INTO proyectos (Proyecto , porducto, marca, consumo, tipo, alimentacion, montaje, perforacion, color, material, descripcion, nota //estos son los datos que el gridview muestra menos PROYECTO ya que ese es el nombre con el que guardo el proyecto)
                                  VALUES ('"+textbox1+"', que pongo????????????????????????????????)";

    y luego escribo esto?

    command.Parameters.AddWithValue("param1", Proyecto ); <---------- este dato no proviene del DT... es el nombre que le pongo al proyecto y lo escribo en un textbox
    command.Parameters.AddWithValue("param2", producto);
    command.Parameters.AddWithValue("param2", marca);
    command.Parameters.AddWithValue("param3", consumo);
    .
    .
    .
    .
    etc

    no se si estoy bien

    martes, 19 de enero de 2010 18:25
  • hola

    si disculpa es que a veces por armar un ejemplo para explicar el cocnepto se olvida los detalles

    using (NpgsqlConnection conn = new NpgsqlConnection("connection string"))
    {
        conn.Open();

        DataTable dt = Session["datos"] as DataTable;
       
        string sql = @"INSERT INTO proyectos (Proyecto, Producto, Marca)
                                  VALUES (@proyecto, @producto, @marca)";

        foreach(DataRow row in dt.Rows)
        {
       
            NpgsqlCommand command = new Npgsql Command(sql, conn);
            command.Parameters.AddWithValue("proyecto", Convert.ToInt32(row["proyecto"] ));
            command.Parameters.AddWithValue("producto", Convert.ToString(row["producto"] ));
            command.Parameters.AddWithValue("marca", Convert.ToString(row["marca"] ));
           
            command.ExecuteNonQuery();
        }

    }

    como veras alli si esta usando la row del datatable para armar el query con parametros


    Nota, valida los tipos de datos a los que converti esto es solo un ejemplo verifica con el tipo de datos de la columna en la tabla

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta kaskodrilo martes, 19 de enero de 2010 18:55
    martes, 19 de enero de 2010 18:31
  • obio xD, como pusiste proyecto pense que era donde guardabas uno de los datos de tu DT, mira si lo aras en un ciclo con for o while te dare un ejemplo ya que en ciclo el addwithvalue no sirve a menos que vuelvas a intansiarlo

    una DT con 3 columnas Nombre ,Id , Sexo  y que tiene al rededor de 10 filas
    dim i =0;

    while i<dt.rows.count then  <------------------dt.rows.count tendria el valor de filas en este caso 10

    dim nom=dt.rows[i].item[0].tostring ; <---------------------------el i representa el indice del la columna donde ira sacado la informacion
    dim id=dt.rows[i].item[1].value2;
    dim Sexo=dt.rows[i].item[2].tostring;


    string sql = @"INSERT INTO Persona(Nombre , Id , Sexo) values ('"+ nom +"',"& id &",'"+ sexo +"'))";
    dim QueryPrueba = new sqlcommad(sql,rutabsedatos);

    rutabsedatos.open();
    QueryPrueba.ExecuteNonQuery();

    rutabsedatos.close();
    i=i+1
    end while



    hay le agregas los try.
    espero te sirva el ejemplo saludos.
    martes, 19 de enero de 2010 18:35
  • gracias Leandro y ARthemiaz

    segire el concejo de leandro... pero muchas gracias ARthemiaz
    martes, 19 de enero de 2010 19:18
  • hola... finalmente deje el codigo en un metodo llamado "guarda"

    y lo deje asi

                conexion con = new conexion();
                string query;
                DataTable dt = Session["datos"] as DataTable;
                query = ("INSERT INTO proyectos (Proyecto , productooriginal, marcaoriginal, consumo, tipo, alimentacion, montaje, perforacion, color, material, descripcion, nota) VALUES ('" + TextBox1.Text + "', @porducto, @marca, @consumo, @tipo, @alimentacion, @montaje, @perforacion, @color, @material, @descripcion, @nota");
               
                NpgsqlDataAdapter da = new NpgsqlDataAdapter();
                NpgsqlCommand command = new NpgsqlCommand(query);
                da = con.ConsultaDataAdapter(query);
                foreach (DataRow row in dt.Rows)
                {
                    command.Parameters.AddWithValue("proyecto", TextBox1.Text);
                    command.Parameters.AddWithValue("productooriginal", Convert.ToString(row["producto"]));
                    command.Parameters.AddWithValue("marcaoriginal", Convert.ToString(row["marca"]));
                    command.Parameters.AddWithValue("consumo", Convert.ToString(row["consumo"]));
                    command.Parameters.AddWithValue("tipo", Convert.ToString(row["tipo"]));
                    command.Parameters.AddWithValue("alimentacion", Convert.ToString(row["alimentacion"]));
                    command.Parameters.AddWithValue("montaje", Convert.ToString(row["montaje"]));
                    command.Parameters.AddWithValue("perforacion", Convert.ToString(row["perforacion"]));
                    command.Parameters.AddWithValue("color", Convert.ToString(row["color"]));
                    command.Parameters.AddWithValue("material", Convert.ToString(row["material"]));
                    command.Parameters.AddWithValue("descripcion", Convert.ToString(row["descripcion"]));
                    command.Parameters.AddWithValue("nota", Convert.ToString(row["nota"]));
                    command.ExecuteNonQuery();
                }

    pero me arroja una excepcion ("la coneccion no esta abierta")
    probe hacer la coneccion como lo hiso leandro.... pero me dio otro error diciendome que la coneccion no se ajustaba.

    en fin... no como solucionar este dramon
    si ustedes ven algo malo... porfa comenten

    saludos
    miércoles, 20 de enero de 2010 15:34
  • FINALMENTE deje este codigo, para que isertara datos en la BD....(pero me da una exception) :( (El formato de la cadena de inicialización no se ajusta a la especificación que comienza en el índice 0.)   base.ConnectionString = connectionString; <---------- me marca esta linea de la clase NpgsqlConnectionStringBuilder

    el codigo es el sgte:

    string connectionString = "Server=192.168.1.121;Port=5432;User Id=postgres;Timeout=60;ConnectionLifeTime=10;Pooling=false;Password=1234;Database=test_restore;";
                using (NpgsqlConnection conn = new NpgsqlConnection("connectionString"))
                {
                    conn.Open();
                string query;
                DataTable dt = Session["datos"] as DataTable;
                query = ("INSERT INTO proyectos (Proyecto , productooriginal, marcaoriginal, consumo, tipo, alimentacion, montaje, perforacion, color, material, descripcion, nota) VALUES ('" + TextBox1.Text + "', @porducto, @marca, @consumo, @tipo, @alimentacion, @montaje, @perforacion, @color, @material, @descripcion, @nota");
                NpgsqlDataAdapter da = new NpgsqlDataAdapter();
                NpgsqlCommand command = new NpgsqlCommand(query);
                //da = conn.ConsultaDataAdapter(query);
                foreach (DataRow row in dt.Rows)
                {
                    command.Parameters.AddWithValue("proyecto", TextBox1.Text);
                    command.Parameters.AddWithValue("productooriginal", Convert.ToString(row["producto"]));
                    command.Parameters.AddWithValue("marcaoriginal", Convert.ToString(row["marca"]));
                    command.Parameters.AddWithValue("consumo", Convert.ToString(row["consumo"]));
                    command.Parameters.AddWithValue("tipo", Convert.ToString(row["tipo"]));
                    command.Parameters.AddWithValue("alimentacion", Convert.ToString(row["alimentacion"]));
                    command.Parameters.AddWithValue("montaje", Convert.ToString(row["montaje"]));
                    command.Parameters.AddWithValue("perforacion", Convert.ToString(row["perforacion"]));
                    command.Parameters.AddWithValue("color", Convert.ToString(row["color"]));
                    command.Parameters.AddWithValue("material", Convert.ToString(row["material"]));
                    command.Parameters.AddWithValue("descripcion", Convert.ToString(row["descripcion"]));
                    command.Parameters.AddWithValue("nota", Convert.ToString(row["nota"]));
                    command.ExecuteNonQuery();
                }
            }


    saludos y..................AYUDAAAAAAAAA! xD

    miércoles, 20 de enero de 2010 19:45
  • nunca e usado el Npgsql pero es similar al sqlclient , bueno te recomiedo dos cosas la primera es que arriba de  del foreach  pongas el conn.open()
    y al final del ciclo pongas el conn.close() cuando me refiero al final es fuera del ciclo, tambien en el  NpgsqlCommand command = new NpgsqlCommand(query);
     prueba poniedo  NpgsqlCommand command = new NpgsqlCommand(query,conn);
    saludos.

    y tambien en el Dataadapter da = conn.ConsultaDataAdapter(query,conn);

    a todo esto porque una DataAdapter?
    rellenaras un dataset?o un datatable ?
    • Marcado como respuesta kaskodrilo miércoles, 20 de enero de 2010 20:31
    miércoles, 20 de enero de 2010 20:13
  • gracias ARthemiaz hice lo que tu me dices y me da el siguiente error en el DataAdapter:

    da = conn.ConsultaDataAdapter (query, conn);

    Error    1    'Npgsql.NpgsqlConnection' no contiene una definición de 'ConsultaDataAdapter' ni se encontró ningún método de extensión 'ConsultaDataAdapter' que acepte un primer argumento de tipo 'Npgsql.NpgsqlConnection' (¿falta una directiva using o una referencia de ensamblado?) 

    saludos y gracias
    miércoles, 20 de enero de 2010 20:21
  • gracias ARthemiaz hice lo que tu me dices y me da el siguiente error en el DataAdapter:

    da = conn.ConsultaDataAdapter (query, conn);

    Error    1    'Npgsql.NpgsqlConnection' no contiene una definición de 'ConsultaDataAdapter' ni se encontró ningún método de extensión 'ConsultaDataAdapter' que acepte un primer argumento de tipo 'Npgsql.NpgsqlConnection' (¿falta una directiva using o una referencia de ensamblado?) 

    saludos y gracias

     da = new NpgsqlDataAdapter(query, conn);
    cambia por eso.

    • Marcado como respuesta kaskodrilo miércoles, 20 de enero de 2010 20:31
    miércoles, 20 de enero de 2010 20:27
  • gracias... con eso solucione el error pero cuando le doy al boton "guardar proyecto" me da esta exception

    ( (El formato de la cadena de inicialización no se ajusta a la especificación que comienza en el índice 0.)   base.ConnectionString = connectionString; <---------- me marca esta linea de la clase NpgsqlConnectionStringBuilder

    en resumen... lo mismo que al principio :(

    gracias de todos modos
    miércoles, 20 de enero de 2010 20:31
  • un datatable llena el gridview

    salu2
    miércoles, 20 de enero de 2010 20:32
  • con un punto te interrupcion , en que linea te da error?
    miércoles, 20 de enero de 2010 20:37
  • parece que ya se cual es el problema.... parece que el datatable almacenado en la variable Session ... estan en un formato (producto , marca, bla, bla) y estoy tratando de tomar eso y ponerlo en otro formato (productooriginal, marcaoriginal, etc etc) y meterlo a la BD.... el drama es que en la variable Session estan contenidos los items que saque de la tabla productos.... y quiero meterlos con otros nombres en la tabla proyectos... no se... lo meditare

    creo que por ahi va la cosa... de todas formas estare atento a sus comentarios

    saludos
    miércoles, 20 de enero de 2010 20:40
  • prueba con un punto de interrupcion para ver donde te hace el problema.

    saludos

    miércoles, 20 de enero de 2010 20:43
  • lo hice... te explico

    using (NpgsqlConnection conn = new NpgsqlConnection("connectionString") ) <---------- despues de hacer click en guardar... la siguiente linea que recorre es la que te he marcado... e inmediatamente de eso... se va al Exception
    ( (El formato de la cadena de inicialización no se ajusta a la especificación que comienza en el índice 0.)   base.ConnectionString = connectionString;

    es decir... nisiquiera ha pasado por el codigo .... entra al Using y paf! se cae

    :(
    miércoles, 20 de enero de 2010 20:57
  • ya hay ta xD. ese es el problema , entoces tu connectionString esta mal escrito ,verifica bien.

    prueba sacado del using de lo parentecis, dejandolo de cabezaera en tu codigo(la primera linea de tu funcion) y en ves de hacer el connectionString


       string connectionString= "Server=192.168.194.92;Port=5432;User Id=postgres;Password=mipassword;Database=mibase;";---------_>ejemplo xD
    conn = new NpgsqlConnection("connectionString");


    acuerdate que es sensible a mayusulas y minisculas, veiifica bien el nombre de la basededatos.
    jueves, 21 de enero de 2010 0:44
  • gracias ARthemiaz ................. pero depure paso a paso y cuando pasa por

    string connectionString = "Server=192.168.1.121;Port=5432;User Id=postgres;Timeout=60;ConnectionLifeTime=10;Pooling=false;Password=1234;Database=test_restore;";

    ( (El formato de la cadena de inicialización no se ajusta a la especificación que comienza en el índice 0.)   base.ConnectionString = connectionString;

    :(

    lo mas extraño es que otros metodos usan y llaman el metodo conecion() que llama a su ves el metodo conectar y dentro de este mismo esta esa cadena.... lo que hice ahora fue simplemente traer la cadena que tenia en el metodo conectar... y aun asi.. no funka


    no se ke haceeeeeeeeeer


    POSTEARE UNOS SCREENSHOTS dame un minuto
    jueves, 21 de enero de 2010 12:31
  • pero esa misma cadena , en otra parte funciona?

    jueves, 21 de enero de 2010 12:40
  • AR ya solucione el drama... pero tengo otro ahora xD!!

    el codigo finalmente kedo asi

    protected void Button3_Click(object sender, EventArgs e)//Guardar
        {
                NpgsqlConnection con = new NpgsqlConnection("Server=192.168.1.121;Port=5432;User Id=postgres;Timeout=60;ConnectionLifeTime=10;Pooling=false;       Password=1234;Database=test_restore;");
                string query;
                DataTable dt = Session["datos"] as DataTable;
                query = ("INSERT INTO proyectos (Proyecto , productooriginal, marcaoriginal, consumo, tipo, alimentacion, montaje, perforacion, color, material, descripcion, nota) VALUES ('" + TextBox1.Text + "', @porducto, @marca, @consumo, @tipo, @alimentacion, @montaje, @perforacion, @color, @material, @descripcion, @nota");
                NpgsqlDataAdapter da = new NpgsqlDataAdapter();
                NpgsqlCommand command = new NpgsqlCommand(query, con);
                da = new NpgsqlDataAdapter(query, con);
                con.Open();
                foreach (DataRow row in dt.Rows)
                {
                    command.Parameters.AddWithValue("proyecto", TextBox1.Text);
                    command.Parameters.AddWithValue("productooriginal", Convert.ToString(row["producto"]));
                    command.Parameters.AddWithValue("marcaoriginal", Convert.ToString(row["marca"]));
                    command.Parameters.AddWithValue("consumo", Convert.ToString(row["consumo"]));
                    command.Parameters.AddWithValue("tipo", Convert.ToString(row["tipo"]));
                    command.Parameters.AddWithValue("alimentacion", Convert.ToString(row["alimentacion"]));
                    command.Parameters.AddWithValue("montaje", Convert.ToString(row["montaje"]));
                    command.Parameters.AddWithValue("perforacion", Convert.ToString(row["perforacion"]));
                    command.Parameters.AddWithValue("color", Convert.ToString(row["color"]));
                    command.Parameters.AddWithValue("material", Convert.ToString(row["material"]));
                    command.Parameters.AddWithValue("descripcion", Convert.ToString(row["descripcion"]));
                    command.Parameters.AddWithValue("nota", Convert.ToString(row["nota"]));
                    command.ExecuteNonQuery();
                }
                con.Close();
           
        }

    ahora se ejecuta todo el metodo pero se detiene ahi y se cae mostrandome esta exception

    ERROR: 42601: syntax error at end of input

    :/ estoy viendo ke puede ser
    jueves, 21 de enero de 2010 12:51
  • hola

    creo que claramente veo algo que no esta en su lugar

    INSERT INTO proyectos (Proyecto , productooriginal, marcaoriginal, consumo, tipo, alimentacion, montaje, perforacion, color, material, descripcion, nota) VALUES ('" + TextBox1.Text + " ', @porducto, @marca, @consumo, @tipo, @alimentacion, @montaje, @perforacion, @color, @material, @descripcion, @nota");

    como marco en negrita si usas parametros porque has dejado ese textbox en el query?

    reemplazalo por el parametro que corresponde

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    jueves, 21 de enero de 2010 12:54
  • lo que pasa leandro es que la columna que va en la database llamada "proyecto" es el nombre con el que se almacena el pryecto propiamente tal... es decir.. yo selecciono los productos y luego de tener el gridview con todos los productos que necesito... escribo el nombre del proyecto en el textbox1 y luego preciono "guardar proyecto"

    es por eso que agrege a la query eso..... esta bien o no?
    jueves, 21 de enero de 2010 13:06
  • hola

    pero luego le estas psando el parametro aqui

    command.Parameters.AddWithValue("proyecto ", TextBox1.Text);


    porque simplemente no agregas el parametro al query

    INSERT INTO proyectos (Proyecto , productooriginal, marcaoriginal, consumo, tipo, alimentacion, montaje, perforacion, color, material, descripcion, nota) VALUES (@proyecto , @porducto, @marca, @consumo, @tipo, @alimentacion, @montaje, @perforacion, @color, @material, @descripcion, @nota");


    eso seria todo
    igual esto por ahi no soluciona el prolema del error que tienes, pero puede ser una de als causas

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    jueves, 21 de enero de 2010 13:10
  • asi es... entendi tu punto.... y lo modifique... y claro tienes razon aun persiste el error

    ERROR: 42601: syntax error at end of input



    +        $exception    {"ERROR: 42601: syntax error at end of input"}    System.Exception {Npgsql.NpgsqlException}
    +        this    {Npgsql.ForwardsOnlyDataReader}    Npgsql.ForwardsOnlyDataReader


    saludos y gracias leandro
    jueves, 21 de enero de 2010 13:13
  • hola

    creo haber encontrado el problema te falta el ) final en el query

    igualmente te aconsejaria que pruebes con un codigo como este

    protected void Button3_Click(object sender, EventArgs e)//Guardar
    {

        string connectionstring = "Server=192.168.1.121;Port=5432;User Id=postgres;Timeout=60;ConnectionLifeTime=10;Pooling=false; Password=1234;Database=test_restore;";
       
        using(NpgsqlConnection con = new NpgsqlConnection(connectionstring))
        {
            con.Open();
           
            string query = @"INSERT INTO proyectos (Proyecto , productooriginal,
                                marcaoriginal, consumo, tipo, alimentacion,
                                montaje, perforacion, color, material,
                                descripcion, nota)
                            VALUES (@proyecto, @porducto, @marca,
                                @consumo, @tipo, @alimentacion, @montaje,
                                @perforacion, @color, @material, @descripcion, @nota)";

            DataTable dt = Session["datos"] as DataTable;
                               
            foreach (DataRow row in dt.Rows)
            {
                using(NpgsqlCommand command = new NpgsqlCommand(query, con))
                {
               
                    NpgsqlDataAdapter da = new NpgsqlDataAdapter(query, con);

                    command.Parameters.AddWithValue("proyecto", TextBox1.Text);
                    command.Parameters.AddWithValue("productooriginal", Convert.ToString(row["producto"]));
                    command.Parameters.AddWithValue("marcaoriginal", Convert.ToString(row["marca"]));
                    command.Parameters.AddWithValue("consumo", Convert.ToString(row["consumo"]));
                    command.Parameters.AddWithValue("tipo", Convert.ToString(row["tipo"]));
                    command.Parameters.AddWithValue("alimentacion", Convert.ToString(row["alimentacion"]));
                    command.Parameters.AddWithValue("montaje", Convert.ToString(row["montaje"]));
                    command.Parameters.AddWithValue("perforacion", Convert.ToString(row["perforacion"]));
                    command.Parameters.AddWithValue("color", Convert.ToString(row["color"]));
                    command.Parameters.AddWithValue("material", Convert.ToString(row["material"]));
                    command.Parameters.AddWithValue("descripcion", Convert.ToString(row["descripcion"]));
                    command.Parameters.AddWithValue("nota", Convert.ToString(row["nota"]));
                   
                    command.ExecuteNonQuery();
                }
            }
        }
       

    }

    como veras el using asegura el uso de los objetos de conexion
    y la idea ademas es usar un comand por cada fila sino podrias tener problemas la agregar los parametros de forma repetida

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta kaskodrilo jueves, 21 de enero de 2010 13:48
    jueves, 21 de enero de 2010 13:22
  • leandro tiene razon se refiere a esta linea    query = ("INSERT INTO proyectos (Proyecto , productooriginal, marcaoriginal, consumo, tipo, alimentacion, montaje, perforacion, color, material, descripcion, nota) VALUES ('" + TextBox1.Text + "', @porducto, @marca, @consumo, @tipo, @alimentacion, @montaje, @perforacion, @color, @material, @descripcion, @nota");


    modificala por   
    query = "INSERT INTO proyectos (Proyecto , productooriginal, marcaoriginal, consumo, tipo, alimentacion, montaje, perforacion, color, material, descripcion, nota) VALUES (@proyecto, @porducto, @marca, @consumo, @tipo, @alimentacion, @montaje, @perforacion, @color, @material, @descripcion, @nota)";
    • Marcado como respuesta kaskodrilo jueves, 21 de enero de 2010 13:48
    jueves, 21 de enero de 2010 13:29
  • Leandro puede ser... que mi gridview contiene datos alfanumericos (te dejo el link de una imagen de mi gridview con datos)
    http://i77.photobucket.com/albums/j74/androidexxx/grilla.jpg
    .... el tema es que en mi codigo todo lo tengo convirtiendo a string (command.Parameters.AddWithValue("productooriginal", Convert.ToString (row["producto"]));.... no sera ese el error??
    lo que sucede es que por ejemplo....  "producto" es el campo que contiene el nombre del producto... y este puede ser por ejemplo : 'WD332' como tambien puede ser '60150' o 'lutron' ...... en fin.... ahi vere cual es el drama...

    y por ultimo yo coloco despues de pasar los parametros es decir ... al final

    esto command.ExecuteNonQuery();

    esta bien cierto?
    jueves, 21 de enero de 2010 13:31
  • SIIIIIIIIIIIIIIIIIII ESO ERA..... ahora estoy arreglando la query... que tiene errores...



    GRACIAS LEANDRO POR TU OJO BIONICO!!!

    saludos
    jueves, 21 de enero de 2010 13:48
  • hola

    la idea de los parametros es que estos deberian convertirse al mismo tipo que estas utilziando en el campo de tu base de datos

    por ejemplo veo un parametro de nombre "tipo" si en tu tabla en la db, lo has declarado como del integer, lo logico seria que en el parametro lo convirtas a este tipo de dato tambien


    mas alla de eso con al modificacion del codigo sigue el problema?

    lo comento porque habia visto que el error anterior se daba por la falta del parantesis final en el query
    has podido validar este punto, o ahora cambio la descripcion del error?

    saludos

    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    jueves, 21 de enero de 2010 13:50
  • no estoy seguro pero el error es por los parametro de entrada y row es fila no columna............... prueba con un DataColumn

     

     

    EDITO: error mio lo del datacolumn =)
    jueves, 21 de enero de 2010 13:53
  • como te respondi ..... ese era el unico problema   me faltaba un parentesis :B.... luego me dio un error pero fue por unas imperfecciones en la query.... asi que solucione eso y vualah!!!

    funcionando 100%

    gracias leonardo y ARthemiaz...

    les dejo el codigo de la solucion

    protected void Button3_Click(object sender, EventArgs e)//Guardar
        {
                NpgsqlConnection con = new NpgsqlConnection("Server=192.168.1.121;Port=5432;User Id=postgres;Timeout=60;ConnectionLifeTime=10;Pooling=false;Password=1234;Database=test_restore;");
                string query;
                DataTable dt = Session["datos"] as DataTable;
                query = ("INSERT INTO proyectos (Proyecto , productooriginal, marcaoriginal, producto, marca, consumo, tipo, alimentacion, montaje, perforacion, color, material, descripcion, nota) VALUES (@proyecto, @productooriginal, @marcaoriginal, @producto, @marca, @consumo, @tipo, @alimentacion, @montaje, @perforacion, @color, @material, @descripcion, @nota)");
                NpgsqlDataAdapter da = new NpgsqlDataAdapter();
                NpgsqlCommand command = new NpgsqlCommand(query, con);
                da = new NpgsqlDataAdapter(query, con);
                con.Open();
                foreach (DataRow row in dt.Rows)
                {
                    command.Parameters.AddWithValue("@proyecto", TextBox1.Text);
                    command.Parameters.AddWithValue("@productooriginal", Convert.ToString(row["producto"]));
                    command.Parameters.AddWithValue("@marcaoriginal", Convert.ToString(row["marca"]));
                    command.Parameters.AddWithValue("@producto", Convert.ToString(row["producto"]));
                    command.Parameters.AddWithValue("@marca", Convert.ToString(row["marca"]));
                    command.Parameters.AddWithValue("@consumo", Convert.ToString(row["consumo"]));
                    command.Parameters.AddWithValue("@tipo", Convert.ToString(row["tipo"]));
                    command.Parameters.AddWithValue("@alimentacion", Convert.ToString(row["alimentacion"]));
                    command.Parameters.AddWithValue("@montaje", Convert.ToString(row["montaje"]));
                    command.Parameters.AddWithValue("@perforacion", Convert.ToString(row["perforacion"]));
                    command.Parameters.AddWithValue("@color", Convert.ToString(row["color"]));
                    command.Parameters.AddWithValue("@material", Convert.ToString(row["material"]));
                    command.Parameters.AddWithValue("@descripcion", Convert.ToString(row["descripcion"]));
                    command.Parameters.AddWithValue("@nota", Convert.ToString(row["nota"]));
                    command.ExecuteNonQuery();   
                }
                con.Close();
        }

    saludos
    jueves, 21 de enero de 2010 14:10
  • hola

    que bien que ahora esta funcionando

    igualmente trata de probar de llevar el codigo al ejemplo que arme, como veras tiene una mejor estructura
    o al menos analizalo, pero como te decia la idea del foreach es hacerlo encerrando al command y no solo a los parametros

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    jueves, 21 de enero de 2010 14:44
  • ok
    modificare haber que pasa


    gracias!
    jueves, 21 de enero de 2010 15:08