Le moyen le plus rapide pour charger des données depuis un fichier texte, puis de le stocker dans la base de données

J'ai un problème.

Je suis élaboration d'un projet, mais je suis coincé dans cette partie:

Je veux charger des données depuis un fichier texte et de le stocker dans la base de données access
les choses les données à l'intérieur de chaque fichier texte d'environ 12 000 lignes de données
et chaque fichier texte, il faut environ 10 minutes pour le traiter..

REMARQUE : avant de stocker les données, j'ai séparé chaque ligne de données à partir de fichier texte et de le mettre en string puis-je vérifier si les données sont déjà à l'intérieur de la base de données ou non.
si à l'intérieur de la base de données-je mettre à jour. Si non, puis-je utiliser instruction insert..

Je suis à l'aide de C# pour développer ce programme?
est-il de toute façon la plus rapide pour charger et stocker ces données?

Mise à JOUR:

C'est mon code j'espère que ça aidera à comprendre mes problèmes:

    using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Collections;
using System.Data.OleDb;
namespace DAF
{
public partial class FrontForm : Form
{
public Boolean status;
public FrontForm()
{
InitializeComponent();
//define location of the database
string connection = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\PC\Desktop\Graduation Project\Research\DAF\Data\DAFLogisticDepartment.mdb";
//define location of the text file data
DirectoryInfo di = new DirectoryInfo(@"C:\Users\PC\Desktop\Graduation Project\Research\DAF\Data\");
FileInfo[] fiarr = di.GetFiles("*.txt");
//define connection to database
OleDbConnection con = new OleDbConnection(connection);
String query;
OleDbDataReader rdr = null;
con.Open();
//get all table from database
OleDbCommand cmd = con.CreateCommand();
DataTable dt = con.GetSchema("tables");
DataRow[] dttable = dt.Select();
con.Close();
//read each new textfile inside the folder
foreach (FileInfo fri in fiarr)
{
StreamReader sr = new StreamReader(fri.FullName, System.Text.Encoding.Default);
String line;
String tabledbs, dbsName;
while ((line = sr.ReadLine()) != null)
{
String VRSD, locationID, truckID, yearIn, yearOut, weekIn, weekOut, dayIn, dayOut, timeIn, timeOut, route;
int plantID;
//process each line of data and put into each variable
VRSD = line.Substring(0, 4).Trim();
plantID = Convert.ToInt32(line.Substring(4, 1).Trim());
locationID = line.Substring(5, 4).Trim();
truckID = line.Substring(24, 5).Trim();
yearIn = line.Substring(32, 4).Trim();
weekIn = line.Substring(36, 2).Trim();
dayIn = line.Substring(38, 1).Trim();
timeIn = line.Substring(39, 8).Trim();
yearOut = line.Substring(47, 4).Trim();
weekOut = line.Substring(51, 2).Trim();
dayOut = line.Substring(53, 1).Trim();
timeOut = line.Substring(54, 8).Trim();
route = line.Substring(64, 2).Trim();
//make database name
dbsName = plantID + locationID;
con.Open();
//check if the table exist in database
for (int i = 0; i < dttable.Length - 9; i++)
{
tabledbs = dttable[i]["TABLE_NAME"].ToString();
ArrayList indexlist = new ArrayList();
if (tabledbs == dbsName)
{
//if the table exist, status = true
status = true;
break;
}
}
con.Close();
con.Open();
if (status == true)
{
try
{        
//if the data not in the system, insert statement
query = @"insert into " + plantID + locationID + " values('" + VRSD.ToString() + "'," + plantID + ",'" + locationID + "','" + truckID + "','" + yearIn + "','" + weekIn + "','" + dayIn + "','" + timeIn + "','" + yearOut + "','" + weekOut + "','" + dayOut + "','" + timeOut + "')";
cmd = new OleDbCommand(query, con);
rdr = cmd.ExecuteReader();
con.Close();
}
catch
{
//if the data in the system, update statement
query = @"update " + dbsName + " set YearIn='" + yearIn + "', YearOut='" + yearOut + "', WeekIn='" + weekIn + "', WeekOut='" + weekOut + "', DayIn='" + dayIn + "', DayOut='" + dayOut + "', TimeIn='" + timeIn + "', TimeOut='" + timeOut + "' where LocationID='" + locationID + "' and PlantID=" + plantID + "";
cmd = new OleDbCommand(query, con);
rdr = cmd.ExecuteReader();
con.Close();
}
}
else
{
//create new table
string attribute = "VRSD String,PlantID Integer, LocationID String, TruckID String," +
"YearIn String, WeekIn String, DayIn String, TimeIn String," +
"YearOut String, WeekOut String, DayOut String, TimeOut String";
query = @"CREATE TABLE " + plantID + locationID + "(" + attribute + ")";
cmd = new OleDbCommand(query, con);
cmd.ExecuteNonQuery();
//insert the data
query = @"insert into " + plantID + locationID + " values('" + VRSD.ToString() + "'," + plantID + ",'" + locationID + "','" + truckID + "','" + yearIn + "','" + weekIn + "','" + dayIn + "','" + timeIn + "','" + yearOut + "','" + weekOut + "','" + dayOut + "','" + timeOut + "')";
cmd = new OleDbCommand(query, con);
rdr = cmd.ExecuteReader();
con.Close();
}
status = false;
}
sr.Close();
//after the text file load into database, the text file moved to history folder
MessageBox.Show(fri.FullName.ToString(), "File Manager", MessageBoxButtons.OK);
fri.MoveTo(@"C:\Users\PC\Desktop\Graduation Project\Research\DAF\Data\History\" + fri.Name.ToString() + ".txt");
}
}
private void button2_Click(object sender, EventArgs e)
{
StandardReport sr = new StandardReport();
sr.Show();
}
private void FrontForm_Load(object sender, EventArgs e)
{
}
}
}
  • Est de 10 minutes si mauvais? Nombre de fichiers et à quelle fréquence devez-vous faire cela? Pouvez-vous parrallelise les tâches que vous faites? Avez-vous profilé pour voir où le temps est pris?
  • voici les choses: mon patron veut charger 6 fichiers texte chaque semaine.. Et chaque fichier texte contient plus de 12 000 lignes de données.. à chaque fois que mon patron exécuter le programme, le programme charger chaque fichier texte, case à chaque ligne de la base de données si les données existent ou non. S'ils existent, c'mettre à jour, si pas insérer de dbs.. et chaque fichier texte prend environ 10 minutes. Si il y a 6 fichiers texte ensuite, il y a 1 heures..
  • - Je ajouter mon code.. j'espère que vous pourrez m'aider.. 🙂
  • Encore une question, quel est le format des fichiers de texte que vous souhaitez insérer? Un petit échantillon des données de l'aide.
  • Vous avez 12k lignes, x6... vous attendez-vous la majorité de ces nouvelles ou existantes lignes?
  • Je remarque que vous êtes la création d'une nouvelle table si plantID + locationID n'existe pas, ce qui me semble tout à fait une drôle de conception d'une base de données.
  • à Remou: eh bien, mon patron veut créer une nouvelle table autamatically si les données contenir nouvelle table.. je n'ai pensé à l'aide de VBA au lieu de C#, mais après je charger ces données dans la base de données j'ai encore besoin de le traiter en rapport dans excel.. c'est pourquoi j'utilise C# comme un pont pour ces 2 programmes.. C'est un exemple de 1 ligne de données : "VRSD3AAS ACHTERAS LIJN L09561A*201105521011900201106106282800A 50".. eh bien, je espère que vous pouvez m'aider à trouver un moyen de le faire rapidement 🙂 merci

InformationsquelleAutor Yohanes | 2011-02-11