SQLite, Copie DataSet / DataTable de fichier de Base de données
J'ai rempli un jeu de données avec une Table qui a été créée à partir de un autre fichier de base de données. La table n'est PAS dans le fichier de base de données qui je veux être en mesure de copier le Tableau.
Maintenant, je veux sauver tous les documents (DataTable) nouvellement créé de base de données SQLite fichier...
Comment puis-je le faire?
Aussi je veux vraiment éviter les boucles si cela est possible.
La meilleure réponse est de moi 🙂 donc je vais le partager.C'est boucle, mais écrit 100k entrées 2-3secs.
using (DbTransaction dbTrans = kaupykliuduomConn.BeginTransaction())
{
downloadas.Visible = true; //my progressbar
downloadas.Maximum = dataSet1.Tables["duomenys"].Rows.Count;
using (DbCommand cmd = kaupykliuduomConn.CreateCommand())
{
cmd.CommandText = "INSERT INTO duomenys(Barkodas, Preke, kiekis) VALUES(?,?,?)";
DbParameter Field1 = cmd.CreateParameter();
DbParameter Field2 = cmd.CreateParameter();
DbParameter Field3 = cmd.CreateParameter();
cmd.Parameters.Add(Field1);
cmd.Parameters.Add(Field2);
cmd.Parameters.Add(Field3);
while (n != dataSet1.Tables["duomenys"].Rows.Count)
{
Field1.Value = dataSet1.Tables["duomenys"].Rows[n]["Barkodas"].ToString();
Field2.Value = dataSet1.Tables["duomenys"].Rows[n]["Preke"].ToString();
Field3.Value = dataSet1.Tables["duomenys"].Rows[n]["kiekis"].ToString();
downloadas.Value = n;
n++;
cmd.ExecuteNonQuery();
}
}
dbTrans.Commit();
}
Dans ce cas dataSet1.Tables["duomenys"] est déjà rempli avec toutes les données que j'ai besoin de transférer à une autre base de données. J'ai utilisé la boucle pour remplir le dataset.
OriginalL'auteur Tommix | 2011-11-26
Vous devez vous connecter pour publier un commentaire.
Lorsque vous chargez le
DataTable
à partir de la base de données source, définissez laAcceptChangesDuringFill
propriété de la carte de données pour de faux, de sorte que chargé dossiers sont conservés dans leAdded
de l'état (en supposant que la source de la base de données est SQL Server)Créer la table dans la base de données SQLite, par l'exécution de la
CREATE TABLE
déclaration directement avecSQLiteCommand.ExecuteNonQuery
Créer un nouveau
DataAdapter
pour la connexion de base de données SQLite, et de l'utiliser pourUpdate
la db:Si les tables source et cible ont les mêmes noms de colonnes et les types compatibles, il devrait fonctionner correctement...
Essayez de faire la mise à Jour d'une transaction; si il n'y a pas de transaction explicite, SQLite crée implicitement à chaque insertion, qui est très lente pour des inserts. Aussi, 32k dossiers est assez grand, peut-être vous devriez essayer de le faire en lots plus petits.
A été d'avoir un semblable problème de performances, l'ajout de la transaction résolu pour moi!
OriginalL'auteur Thomas Levesque
Le moyen d'importer
SQL
données àSQLite
va prendre beaucoup de temps. Lorsque vous souhaitez importer des données en millions, Il va prendre beaucoup de temps. Donc, la plus courte et la plus simple façon de le faire est tout simplement de remplir de récupérer les données à partir de SQL base de données dans unDataTable
et insérer toutes ses lignes deSQLite
base de données.Il faudra très peu de temps que de les comparer à haut réponses données.
OriginalL'auteur Amit Kumawat