C# Verbindung zu einer Datenbank herstellen

x1xJanikx1x

Mitglied
Hallo Community,

wie der Titel schon sagt würde ich gerne Daten (Text) die in einer Datenbank stehen auslesen. Ich arbeite in C# mit einem WPF Projekt.

Dazu wollte ich diesen Code nehmen:
Code:
        class Csharp_Access
        {
            public void Csharp_Access_Datenbank()
            {

                OleDbConnection con = new OleDbConnection(
                   @"Provider=Microsoft.Jet.OLEDB.4.0;
                    Data Source=C:\Data.accdb");
                con.Open();

                string strSQL = "SELECT * FROM Tabelle1";

                OleDbCommand cmd = new OleDbCommand(strSQL, con);
                OleDbDataReader dr = cmd.ExecuteReader();

                while (dr.Read())
                {
                    MessageBox.Show(dr[0].ToString());

                }
                dr.Close();
                con.Close();
            }
        }

Wenn ich das Programm nun ausführe bekomme ich nicht den gewünschten Inhalt sondern lediglich ein leeres Fenster.
Ich hoffe ihr könnt meinen Fehler finden.
LG Janik
 

x1xJanikx1x

Mitglied
Hallo,

habe jetzt lange dran gesessen und bin in meinen Augen schon ein wenig weiter gekommen.

Mein Code sieht jetzt so aus:

Code:
namespace WpfApplication1
{
    /// <summary>
    /// Interaktionslogik für MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {

        public MainWindow()
        {
            InitializeComponent();
        }


        private void button1_Click(object sender, RoutedEventArgs e)
        {
            OleDbConnection con = new OleDbConnection(
                      @"Provider=Microsoft.Jet.OLEDB.12.0;
                    Data Source=Data.accdb");
            con.Open();

            string strSQL = "SELECT * FROM Tabelle1";

            OleDbCommand cmd = new OleDbCommand(strSQL, con);
            OleDbDataReader dr = cmd.ExecuteReader();

            while (dr.Read())
            {
                MessageBox.Show(dr[0].ToString());

            }
            dr.Close();
            con.Close();
        }
    }
        }

Nun bekomme ich immer wenn ich auf meinen Button klicke diese Fehlermeldung:

Der 'Microsoft.Jet.OLEDB.12.0'-Provider ist nicht auf dem lokalen Computer registriert.

Weiß einer was das zu bedeuten hat bzw. hat sogar jemand eine Lösung?

Danke für eure Hilfe schon mal im voraus!

LG Janik
 

x1xJanikx1x

Mitglied
Hallo Hale,

Danke für deine Antwort, allerdings konnte ich meinen Fehler anders lösen.

Ich musste lediglich das Jet im Provider durch ACE ersetzen.

Code:
 @"Provider=Microsoft.Jet.OLEDB.12.0;

Code:
 @"Provider=Microsoft.ACE.OLEDB.12.0;

Trotzdem Danke für deine Hilfe, dein Vorschlag mit der Treiberaktuallisation würde ebenfalls funktionieren, ich ändere allerdings lieber 3 Zeichen anstatt mir einen neuen Treiber runter zu laden, allerdings muss dass jeder für sich entscheiden.

LG Janik
 
Zuletzt bearbeitet:

x1xJanikx1x

Mitglied
Hallo,

weiß einer von euch wie ich eine ganze Zeile auslesen kann?

Bisher lese ich es so aus:

Code:
            string strSQL = "SELECT * FROM Tabelle1";


            OleDbCommand cmd = new OleDbCommand(strSQL, con);
            OleDbDataReader dr = cmd.ExecuteReader();

            while (dr.Read())
            {
                TextBox1.Text = (dr[0].ToString());


            }
            dr.Close();
            con.Close();

Die 0 gibt mir jetzt lediglich den letzten wert aus der ersten Spalte aus, würde ich 1 nehmen würde er mir den letzten Wert aus der zweiten Spalte ausgeben.

Ich hoffe einer von euch kann mir sagen was sich da noch machen lässt.

LG Janik
 

TeacherRolf

Grünschnabel
Hallo,

weiß einer von euch wie ich eine ganze Zeile auslesen kann?

Bisher lese ich es so aus:

Code:
            string strSQL = "SELECT * FROM Tabelle1";


            OleDbCommand cmd = new OleDbCommand(strSQL, con);
            OleDbDataReader dr = cmd.ExecuteReader();

            while (dr.Read())
            {
                TextBox1.Text = (dr[0].ToString());


            }
            dr.Close();
            con.Close();

Die 0 gibt mir jetzt lediglich den letzten wert aus der ersten Spalte aus, würde ich 1 nehmen würde er mir den letzten Wert aus der zweiten Spalte ausgeben.

Ich hoffe einer von euch kann mir sagen was sich da noch machen lässt.

LG Janik
 

TeacherRolf

Grünschnabel
Hallo x1xJanikx1x

Deine Aussage ist falsch. Mit dr[0] bekommst du beim ersten While-Durchlauf die erste Spalte der ersten Zeile, beim zweiten die erste der zweiten Zeile usw. dr[1] liefert die jeweilig 2. Zeile. Das gilt immer bei select *. Gibst du einzelne Spalten an, so werden die Spalten in der Reihenfolge ihres Aufrufs angezeigt. In dr steht aber immer das angeforderte Ergebnis einer Zeile.

Gruß Rolf