Von TXT in DB (Access) schreiben, wird nicht ausgeführt?

Deletemaster

Erfahrenes Mitglied
Ich brauche bitte Hilfe,
ich habe ein kleines Programm, was Datensätze aus einer txt list, und anschliessend in eine Tabelle schreiben soll,
Leider werden KEINE Eintragungen vorgenommen.
Könnt ihr bitte mal sehen wo der Fehler liegt
Danke
Code:
static void Main(string[] args)
		{

			StreamReader myStream = File.OpenText(@"D:\Musikarchiv.txt");//Quelldatei

			OleDbConnection conn = new OleDbConnection();
			conn.ConnectionString = ("Provider=Microsoft.Jet.OLEDB.4.0;" +
			"Data Source=D:\\Musikarchiv.mdb;");

			conn.Open();

			OleDbCommand cmd = new OleDbCommand();
			cmd.Connection = conn; 

			while (myStream.Peek() != -1)
			{
				string line = myStream.ReadLine();

				string[] datensatz = new string[8];

				for (int count = 0; count != 8; count ++)
				{
					if (line.IndexOf(";") != -1)
					{
						int pos = line.IndexOf(";",0); 
						string mySubstring = line.Substring(0,pos);
						line = line.Remove(0,pos+1); 
						datensatz[count] = mySubstring;
					}
					else
					{
						datensatz[count] = line;
					} 
				}
				cmd.CommandText = "INSERT INTO Test(Laufwerk, Hauptverzeichnis, ArchivNr, Collection, Albumname, Titelnummer, Interpret, Titel)" +
					"VALUES(@f1)";
				cmd.Parameters.Add("@f1", datensatz[0]);
				cmd.Parameters.Add("@f2", datensatz[1]);
				cmd.Parameters.Add("@f3", datensatz[2]);
				cmd.Parameters.Add("@f4", datensatz[3]);
				cmd.Parameters.Add("@f5", datensatz[4]);
				cmd.Parameters.Add("@f6", datensatz[5]);
				cmd.Parameters.Add("@f7", datensatz[6]);
				cmd.Parameters.Add("@f8", datensatz[7]);
				
				}
		myStream.Close();
			conn.Close(); 
		}
 
Ich habe den Befehl cmd.ExecuteNonQuery();
schon mit angehängt,
leider schreibt er "nur" eine begrenzte Anzahl (503)in die Tabelle.(immer nur die gleiche, die erste Zeile als Datensatz ! 503 x
In der Textdatei stehen aber über 8000 Zeilen.
Selbst wenn ich anschliessend noch cmd.Parameters.Clear();
ranhänge bekomme ich nicht den gewünschten Erfolg.
Es werden jetzt zwar verschiedene Datensätze in die Tabelle geschrieben aber NICHT alle.
Es kommt anschliessend die Fehlermeldung:
Unbehandelte Ausnahme: System.Data.OleDb.OleDbException: Das Feld ist zu klein für die Datenmenge, die Sie hinzufügen wollten. Versuchen Sie, weniger Daten einzufügen.

Ich kann mir einfach den Fehler Nicht erklären...
Code:
while (myStream.Peek() != -1)
	{
	string line = myStream.ReadLine();

	string[] datensatz = new string[8];

	for (int count = 0; count != 8; count ++)
		{
		if (line.IndexOf(";") != -1)
			{
			int pos = line.IndexOf(";"); 
			string mySubstring = line.Substring(0,pos);
			line = line.Remove(0,pos+1); 
			datensatz[count] = mySubstring;
			}
			else
			{
			datensatz[count] = line;
			} 
			}
			try
			{
			cmd.CommandText = "INSERT INTO Test" +
"(Laufwerk, Hauptverzeichnis, ArchivNr, Collection, Albumname," +
"Titelnummer, Interpret, Titel)" +
	"VALUES(@f1,@f2,@f3,@f4,@f5,@f6,@f7,@f8)";
		cmd.Parameters.Add("@f1", datensatz[0]);
		cmd.Parameters.Add("@f2", datensatz[1]);
		cmd.Parameters.Add("@f3", datensatz[2]);
		cmd.Parameters.Add("@f4", datensatz[3]);
		cmd.Parameters.Add("@f5", datensatz[4]);
		cmd.Parameters.Add("@f6", datensatz[5]);
		cmd.Parameters.Add("@f7", datensatz[6]);
		cmd.Parameters.Add("@f8", datensatz[7]);
					
		cmd.ExecuteNonQuery();
		cmd.Parameters.Clear();

		}
		catch(IOException ex)
		{
 
Dann musst du dir ansehen wie groß das entsprechende Datenfeld ist (wieviel Text zb passt da rein, oder wie groß darf die Zahl maximal sein). Deshalb bricht er auch ab. Das einfach anpassen, dann kommst schon mal einen Schritt weiter.
 
Hmmm, ich verstehe das Problem nicht ganz...
Wenn ich mit der Oberfläche von Access Daten in die Tabelle importiere, klappt alles reibungslos
Alle Felder sind vom Typ Text!
Und die Anzahl der Datensätze kann doch nicht relevant sein oder?

Kann ich den Eintrag in die DB aus der TXT evtl. anders realisieren. Mir fällt dazu keine andere Möglichkeit ein.
Wenn ich mit dem StreamReader arbeite, kann ich max. 3 Zeilen auslesen
(Such nach ";" beginne bei 0, string1 ist alles bis zum ersten ";" usw.)(IndexOf)
pos1 = string1 + 1 usw...)
Funktioniert leider nicht wie gewünscht... :confused:
 
Problem gelöst...
Danke für die Hilfe.
(Es war zu beachten, daß sich in den einzelnen strings " ' " befinden, diese mussten erst durch " ' ' " ersetzt werden)
 

Neue Beiträge

Zurück