[Solucionado]C# Como Cargar datos de DGView a SQLite y vicv

Desarrollo de aplicaciones de escritorio C#, c++, Java, Net, VB... y todos los frameworks y tecnologías relacionadas co este tipo de aplicaciones.
Bueno, como no vi algo referente a ni tampoco hay aun un area referente a los ejemplos en c# pue aviento aqui mi solucion...

Como podemos cargar datos desde una db en un DataGridView y viceversa en Microsoft Visual Studio 2012+???

He aqui el ejemplo:
Cargamos la base de datos desde el inicio de la aplicacion.

        protected override void OnShown(EventArgs e)//********************ONSHOW LO CARGAMOS AL MOSTRAR LA APLICACION
{
dataGridView1.Rows.Clear();//Limpiamos el DataGridView
try//El try catch es necesario siempre
{
NewdbConexion.Open();//Abrimos la conexion a la base de datos
dAdapter = new SQLiteDataAdapter(sQuerys, NewdbConexion);//Creamos el adaptador
dDataset = new System.Data.DataSet();//Creamos un Dataset
tbname = dDataset.DataSetName;//Buscamos el nombre de la tabla
if(tbname == ""){tbname = "NOMBRE_DE_LA_TABLA";}//Si no existe (logico) lo introducimos
dAdapter.Fill(dDataset, tbname);//Le damos forma a la tabla que estamos creando
dataGridView1.DataSource = dDataset.Tables[0];//La hacemos visible en el DataGridView
}
catch (Exception exc)//Tomamos el posible error y en dado caso lanzamos un dialogo de error
{
MessageBox.Show(exc.Message,
"Titulo",
MessageBoxButtons.OK,
MessageBoxIcon.Exclamation,
MessageBoxDefaultButton.Button1);
}
}


En el boton agregar o ingresar:


private void btnAgregar_Click(object sender, EventArgs e)//********************BUTTON AGREGAR
{
try
{
cBuilder = new SQLiteCommandBuilder(dAdapter);//Creamos un builder de SQLite
tbname = dDataset.DataSetName;//Obtenemos el nombre de la tabla que creamos, ya no es necesario ingresarlo nuevamente, como ya contiene datos entonces nos lo devuelve
dAdapter.Update(dDataset, tbname);//Con un simple update actualizamos la db y el DataGridView
dDataset.AcceptChanges();//Aceptamos los cambios en el DataSet.
}
catch(Exception exc)
{
MessageBox.Show(exc.Message, "Titulo", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
}
}


Para que nos sirve Try y Catch?
Try es capaz de alojar un bloque de codigo y "protegerlo" para no arrojar errores inesperados en la aplicacion, como por ejemplo "que deje de funcionar" por alguna pendjada que cometamos LOL, ademas nos sirve bastante en el debuger, lo considero fundamental en cualquier ejecucion de codigo, al menos complejo. Dicho de una manera mas putamente simple y comparado con a basofia del ams esta accion es un "filtro".

Catch es la clausula que nos regresa el error, puede haber varias clausulas pero esto depende de lo que necesitamos "advertir".

Me dispuse a crear este pequeño Tuto porque estaba realizando el manejo de bases de datos y ni por puto internet encontraba la solucion y ya me estaba pateando el orgullo, por fin lo hice leyendo y carajamente leyendo...

Encontre soluciones hasta con loops del tipo While con Arrays y demas pendejadas que se te puedan ocurrir pero solo esta me funciono en lo particular.

Necesitas System.Data.SQLite y lo debes agregar en las referencias de tu aplicacion, obviamente estamos hablando de un WindowsForms en C#, obviamente para que te funcione deberas de crear y declarar tus parametros como publicos y con tus propias variables.

NOTA:

El DataGridView debe estar completamente vacio.

Si hay dudas pues a comentar...

Saludos ;)

como mola lo del dataset eh?

Personalmente no me gusta usar los conectores de microsoft en general para bases de datos, ni los incluidos, ni linq, creo que la mayoria estan demasiado sobredimensionados y estan orientados a la vieja estructura de mssql que me da arcadas.

Normalmente para SQLite uso este componente https://code.google.com/p/csharp-sqlite/

La verdad es que me gustaria hacer un test de stress y comparar la velocidad de lectura y escritura de grandes volumenes de datos y comprobar cual es mas rapido, pero la libreria que yo uso es totalmente managed y escrita en lenguaje .net, por lo tanto no existe un compilado externo y un puente intermedio de interop con el il, con todo el marshaling que ello conlleva por lo que me imagino que ira algo mejor.

yo he estado usando la de net http://system.data.sqlite.org/index.htm ... index.wiki y no me ha ido mal , aunque ne próximos proyectos usare esa que dices , tus recomendaciones siempre me han echo mejorar , un saludo.

Gracias por los consejos...

Creo que tendre que cambiar de metodos o no se que pex porque hace rato que llegue el puto sqlite me tiraba errores y es que el jodido sqlite no me deja manejar mas de una tabla por base de datos!!!!! CARAJO, como es posible...

Osea, primero estaba manejando una tabla, ahi con el codigo posteado todo perfecto, meti otra tabla y plaffff errores en sintaxis y cuanta sandes, lo solucione, todo tranquilo y feliz pero meti una tercera tabla de plano me jodio todo.

Me estuve documentando y es (al parecer) una incompatibilidad de sqlite con el puto dataset o no se que pex, el sagrado chiste es que no me dejaba manejar mas de una tabla por las carajas conexiones multiples y ni cerrando y abriendo a cada rato me dejaba en paz LOLLLLL MALDICION LOOOOLLL, ya se imaginaran lo que tuve que hacer obviamente tuve que separar todas las tablas, vaya, crear un puto fichero por tabla joder y con esto san seacabo todo correcto otra vez, lo bueno es que estaba manejando una clase en especifico y no me fue tan dificil pero si muy frustrante como ustedes comprenderan.

Ahora no se que hacer, digo, esto me es bastante incomodo, entonces...

Ustedes que tienen mas experiencia en c# y bases de datos que sistema de base me recomiendan, alguna que soporte mas de una tabla y sin problemas por supuesto.

Ya vere las opciones que me han dado.
Saludos ;)

No es difícil montar el grid solo debes (o asi lo hago yo) montar un datatable a partir del reader de tu consulta sqlite , después al grid le das como datasource el datatable y listo, esta claro que lo de la multitabla no es ningún problema.
Tengo un trabajillo a medias con sqlite con la libreria que comente antes , en el uso varias tablas incluso triggers y demás movidas , échale un ojo y haber si te aclara dudas que tengas.

HIDE: ON
Hidebb Message Hidden Description

creo que para abrir un dataset debes cerrar el anterior metafollen

Este ejemplo es usando la libreria que postee antes

using Community.CsharpSqlite.SQLiteClient;
..........
...........

SqliteConnection con = new SqliteConnection();
string dbFilename = @"tpvui\\tvpdatabase.db";
string cs = string.Format("Version=3,uri=file:{0}", dbFilename);
con.ConnectionString = cs;
con.Open();

.....................
.....................
//para escribir

SqliteCommand scmd = new SqliteCommand("INSERT INTO Tikets (id,Fecha,Tipo,Cobrado,Impresiones_tiket,Impresiones_entradas) VALUES (NULL,@DATETEXT,1,0,0,0);", con);
scmd.Parameters.Add(new SqliteParameter { ParameterName = "@DATETEXT", Value = DateTime.Now });
scmd.ExecuteNonQuery();
int returnValue = scmd.LastInsertRowID();

//para leer

SqliteCommand scmd = new SqliteCommand("SELECT * FROM Config LIMIT 1", con);
IDataReader reader = scmd.ExecuteReader();
reader.Read(); //cada vz que se ejecuta esta funcion obtendras el siguiente registro en bbdd
int paginas = reader.GetInt32(reader.GetOrdinal("Paginas"));

Gracias Rafles, ya le echare un ojo, por ahora no lo hago porque tendria que desmembrar mi proyectillo y la verdad que flojera, pero ya que lo haga estoy seguro que me servira demasiado...

Se mira bueno Pablo, que me la he descargado y ya vere que tal va, mas tarde (quiza la proxima semana) dejo mi impresion, no me quiero comprometer pero tengo un madral de cosas que hacer :( . Solo una pregunta garra, esta madre no tiene limitantes con la version de .Net? Por ejemplo, la que uso, la misma que me recomendo Rafa por cierto, tiene limitantes, osea, es una Assembly por version de .Net y hay que descargar la adecuada, supongo que con la que me recomiendas no hay bronca o si?...

Por otro lado les comento que...

En unos cuantos dias termine una aplicacion muy basica, esta madre de Sharp es una canallada, muy sencillo de verdad y tambien muy descepcionante ¬¬ ya lo andare dejando por aqui a ver que tal.

De ante mano Pablo te digo que no vayas a joder con la interface, esta en colores muy basicos LOL :)
:) :) :) :)

Saludos.

interesante
amigo manda pra mim
Gracias
Gracias
:friends: