Laden...

Probleme beim Importieren von Daten mittels OLEDB

Erstellt von Fenixx vor 17 Jahren Letzter Beitrag vor 17 Jahren 1.362 Views
F
Fenixx Themenstarter:in
15 Beiträge seit 2006
vor 17 Jahren
Probleme beim Importieren von Daten mittels OLEDB

Moin zusammen,

ich habe folgendes Problem beim Importieren von Daten mittels OLEDB:
Ich möchte innerhalb einer Webanwendung dem Benutzer das Importieren von Daten ermöglichen. Der Benutzer soll dabei eine Excel-Tabelle verwenden, in der die Daten enthalten sind. Folgende Klasse wird hierbei verwendet. Dabei möchte ich zuerst einmal nur die Daten aus der Excel-Tabelle auslesen und in eine ArrayList packen. Ich verwende hierbei VS 2003. Aufbau der Klasse:

using System;
using System.IO;
using System.Collections;
using System.Collections.Specialized;
using System.Text;
using System.Data.SqlClient;
using System.Data.OleDb;
using cnm.ausbildung.buecher.system;
namespace cnm.ausbildung.buecher.system
{
	/// <summary>
	/// Zusammenfassung für Importieren.
	/// </summary>
	public class Importieren: DatenbankFunktionen
	{

    public static string msConnString = "Data Source={0};Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0";
    public OleDbConnection mConnection = new OleDbConnection((string.Format(msConnString, "D:\\Test\\importieren.txt"))); 


    // Nur die Spalten in der Tabelle tabBuecher werden angegeben
		public Importieren():base(new string[]{"ISBN_10", "ISBN_13", "Titel", "Erscheinungsdatum", "Verlag", "Sprache", "Rubrik", "Auflage", "Kaufpreis", "Bewertung", "Kommentar", "Seitenanzahl"}, "tabBuecher")
		{
			//
			// TODO: Fügen Sie hier die Konstruktorlogik hinzu
			//
		}
    
    public ArrayList SelectData (string lsFileName)
    { 
     ArrayList lsaImportData = new ArrayList(); 
      try
      {
        mConnection.Open();
        System.Data.DataTable lTableNames = new System.Data.DataTable("Selektion");
        lTableNames = mConnection.GetOleDbSchemaTable(Guid.NewGuid(), null);
        string lsTabellenname = msTabellenname;
        // AN WELCHER STELLE IN DER DATATABLE WERDEN DIE TABELLENNAMEN REINGESCHRIEBEN?
        string lsSelect = "SELECT * FROM "+lTableNames;
      
        OleDbCommand Prozedur = new OleDbCommand(lsSelect, mConnection);
        OleDbDataReader lDataReader = Prozedur.ExecuteReader();
        // Anweisung
        while (lDataReader.Read())
        {
          lsaImportData.Add(lDataReader["ISBN_10"]);
          lsaImportData.Add(lDataReader["ISBN_13"]);
          lsaImportData.Add(lDataReader["Titel"]);
          lsaImportData.Add(lDataReader["Erscheinungsdatum"]);
          lsaImportData.Add(lDataReader["Verlag"]);
          lsaImportData.Add(lDataReader["Sprache"]);
          lsaImportData.Add(lDataReader["Rubrik"]);
          lsaImportData.Add(lDataReader["Auflage"]);
          lsaImportData.Add(lDataReader["Kaufpreis"]);
          lsaImportData.Add(lDataReader["Bewertung"]);
          lsaImportData.Add(lDataReader["Kommentar"]);
          lsaImportData.Add(lDataReader["Seitenanzahl"]);
          lsaImportData.Add(lDataReader["Autor"]);
        }
        
      }
      catch (Exception ex)
      {
        mConnection.Close();
        
      }
      mConnection.Close();
      
      return lsaImportData;
    }

Aufruf der Klasse in der Webanwendung:

if (Request.Files != null && Request.Files.Count > 0)
      {
        HttpPostedFile lPostedFile = Request.Files[0];
        if (lPostedFile.ContentType.Equals("application/vnd.ms-excel"))
        {
          // So soll die Datei später heißen
          string lsFileName = "D:\\Test\\importieren.txt";
          // Byte-Array, welches in die Datei geschrieben werden soll
          byte[] lbFileData = new byte[lPostedFile.ContentLength];
          // Schreiben des Byte-Arrays
          lPostedFile.InputStream.Read(lbFileData,0,lPostedFile.ContentLength);
          // FileStream erstellen, um die Datei schreiben zu können
          FileStream lFileStream = new FileStream(lsFileName, FileMode.Create);
          //Byte-Array in die Datei schreiben
          lFileStream.Write(lbFileData,0,lbFileData.Length);
          //FileStream freigeben und löschen
          lFileStream.Flush();
          lFileStream.Close();
     
          Importieren lImportieren= new Importieren();
          ArrayList lsImport = new ArrayList();
          lsImport = lImportieren.SelectData(lsFileName);
          lImportieren.InsertBuch(lsImport);
          lImportieren.InsertAutor(lsImport);
          MessageBox.Show("Ihre Daten wurden erfolgreich in die Datenbank eingefügt");}
}

Der User importiert die Daten also über einem FileUpload.
Anschließend erscheint mir folgende Fehlermeldung: GetOleDbSchemaTable wird von OLEDB 4.0 nicht unterstützt.
Weil ich trotz Internet- und Forenrecherche nicht weitergekommen bin, wende ich mich an euch.
Liegt an dem Connection-String, oder woran?

Um eine Antwort wäre ich euch sehr dankbar.

Gruß
Fenixx

H
30 Beiträge seit 2005
vor 17 Jahren

An welcher Stelle genau kommt denn die Fehlermeldung?
Mir haben damals diese Codebeispiele geholfen:

http://msdn2.microsoft.com/en-us/library/ms971514.aspx

H.

F
Fenixx Themenstarter:in
15 Beiträge seit 2006
vor 17 Jahren

Es lag am Aufbau des GetOleDbSchemaTable, dieser muss wie folgt lauten:

lTableNames = mConnection. GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[]{null, null, null, "TABLE"});