Je dois lire un fichier CSV (ce n'est pas le problème) et effectuez 10 insertions à la fois. Je ne sais pas combien de lignes le fichier CSV auront. J'ai essayé de faire une boucle et chaque mod 10 envoie un commit, mais après deux ou trois fois, le programme donne une erreur. Je n'ai pas d'idéie comment résoudre ce problème.
EDIT: P>
Désolé, je suis en train d'utiliser mon mobile, my My My Code est: P>
using (var connection = new SqliteConnection("conn-string")) { connection.Open(); using (var transaction = connection.BeginTransaction()) { for (int i = 0; i < listCode.Count; i++) { string sql = $"insert into table1 (code) values ({listCode[i]})"; using (var command = new SqliteCommand(sql, connection)) { command.ExecuteNonQuery(); if ( i % 10 == 9) { transaction.Commit(); } } } } }
3 Réponses :
En général, si vous souhaitez traiter Notez que si nous incremporons notre variable de boucle par Par exemple: P > n code> nombre d'éléments dans un
ienumerable
ienumerable code > Méthodes d'extension,
Ignorer CODE>
et Prendre code>
, où vous Ignorer itération * n code> éléments, puis prendre
n code> items de la liste dans une boucle.
n code> sur chaque itération, cela devient la valeur que nous passons à
saute code>. En outre, s'il y a moins de
n code> éléments restants,
prend (n) code> retournera tous les éléments restants. P>
// items would be the list of results from reading your csv file. Pseudocode:
List<SomeType> items = GetCSVItems(csvFilePath);
// Set this to the number of items we want to process in each batch
int batchCount = 10;
// To process a batch of 'batchCount' number of items, we first Skip(iteration * batchCount)
// items in our list, and then we Take(batchCount) items from the list for our next batch
for (int i = 0; i < items.Count; i += batchCount)
{
List<SomeType> itemBatch = items.Skip(i).Take(batchCount).ToList();
// Process itemBatch here
}
Vous pouvez utiliser la méthode d'extension Si vous ne voulez pas gâcher avec des bibliothèques externes, vous pouvez utiliser la méthode ci-dessous, qui est une version légère de Exemple d'utilisation: P> sortie: p> 1, 2, 3, 4, 5 lot code >
de la bibliothèque Morelinq : lots la séquence source dans les godets de taille. < / em> lot code>. p>
6, 7, 8, 9, 10
11, 12, 13, 14, 15
16, 17, 18, 19, 20
21, 22 P>
blockQuote> p>
Je suppose que cette question est maintenant obsolète, car les devoirs sont probablement déjà déjà passés. P>
Cependant, il est évident du code que la première fois que le En outre, vous n'avez aucun code après la boucle pour gérer les rangées résiduelles qui n'étaient même pas divisibles de 10. Même si le code de boucle d'origine avait travaillé, il aurait pu laisser des rangées non engagées qui n'auraient pas été correctement engagées. < / p> transaction.commit (); code> est appelé, la transaction sera complétée. Mais il n'y a pas de nouvelle transaction débutée dans la boucle, la prochaine fois que
transaction.commit (); code> est appelé une erreur se produira car il n'y aura plus de transaction active! P>
Veuillez éditer votre message pour inclure les spécificités du message d'erreur et du code qui provoque l'erreur. Pour les autres conseils, voir Comment demander .
Pourquoi pensez-vous que vous devez faire 10 à la fois?
Ajouter des exemples de code
C'est un devoir, c'est pourquoi j'ai besoin de 10 par 10. Je vais obtenir mon code juste demain, j'ai oublié mon poste de travail. :(
Sans votre code et sans votre erreur, nous ne pouvons pas vous aider. Si je me présente dans la boutique d'un mécanicien de voiture et dis "J'ai rencontré un problème tout en conduisant ma voiture. Je ne vais pas vous dire quel était le problème, et je n'ai pas ma voiture avec moi" alors pensez-vous qu'ils «Je vais être capable d'aider? Pourquoi pensez-vous que le développement logiciel est différent?