Laden...

Ergebnisse einer Oracle-Anfrage in einer WPF-Anwendung darstellen

Erstellt von der_sharky vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.560 Views
D
der_sharky Themenstarter:in
23 Beiträge seit 2017
vor 5 Jahren
Ergebnisse einer Oracle-Anfrage in einer WPF-Anwendung darstellen

verwendetes Datenbanksystem: <ORACLE>
Guten Tag zusammen,
ich erstelle eine WPF Anwendung , die DataGrid hat und mit ORACLE verbunden sein sollte. Leider die Ergebnisse werden nicht im DataGrid dargestellt. Ich bin generell neu in C#. Danke für die Hilfe

Hier ist der Code



private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        try
        {

            String connectionString = "Data Source=DWH; User Id=readonly; Password=********;";
            OracleConnection con = new OracleConnection();
            con.ConnectionString = connectionString;
            con.Open();
            OracleCommand cmd = new OracleCommand();
            cmd.CommandText = "SELECT * FROM SALARIES";
            cmd.Connection = con;
            OracleDataReader dr = cmd.ExecuteReader();
            DataGrid dg = new DataGrid();
            dr.Read();
        }
        catch (Exception exp) { }
    }


16.806 Beiträge seit 2008
vor 5 Jahren

Bitte verwende den Debugger; zudem unterdrückst Du jegliche Exception.
[Artikel] Debugger: Wie verwende ich den von Visual Studio?
Wir können auch nicht riechen, ob da jetzt eine Exception auftaucht oder nicht 😉

Ich hoffe Dir ist zudem bewusst, dass Du zwar nen DataGrid instanziierst und den DataReader liest, aber weder was mit dem Ergebnis noch mit dem DataGrid machst.
Der DataReader kann ja nicht mit Magie entscheiden, was mit seinem Ergebnis passiert.

Bitte beachte zudem [Artikel] Drei-Schichten-Architektur
In WPF sollte man immer mit MVVM arbeiten; dafür ist WPF ausgelegt.

2.078 Beiträge seit 2012
vor 5 Jahren

Ich denke, das könnte auch eine passende Lektüre sein:
[FAQ] Wie finde ich den Einstieg in C#?

Nichts gegen dich, der_sharky, jeder hat Mal klein angefangen, aber Du wirst langfristig einfach besser voran kommen, wenn Du ein Buch liest, als wenn Du alles selber recherchierst 😉
Dein konkretes Thema wird in den Büchern (zumindest Einem) natürlich auch behandelt.

D
der_sharky Themenstarter:in
23 Beiträge seit 2017
vor 5 Jahren

Ok erstmal Danke für die Antwort an alle. Ich habe eine zweite Frage.
Ich habe in der xaml Datei eine DataGrid eingefügt. Wenn ich diese DataGrid mit Daten aus Oracle befüllen möchte, sollte ich davor die Spalten drin vordefinieren und wenn nein welche Möglichkeiten gibt dass sich die DataGrid automatisch anpasst.
Grüße

<Window x:Class="OPEN_ORDERS_ORACLE_TABLE.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:OPEN_ORDERS_ORACLE_TABLE"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800" Loaded="Window_Loaded">
    <Grid Height="419" VerticalAlignment="Top">
        <DataGrid Margin="10,40,10,70"/>
    </Grid>
</Window>
5.657 Beiträge seit 2006
vor 5 Jahren

Erstes Ergebnis bei Google: WPF DataGrid Control.

Evtl. hilft dabei auch: [Artikel] MVVM und DataBinding

Bitte beachte auch: [Hinweis] Wie poste ich richtig?

Weeks of programming can save you hours of planning

D
der_sharky Themenstarter:in
23 Beiträge seit 2017
vor 5 Jahren

Danke an alle für die Hilfe hier ist meine Lösung:


 private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            try
            {

                String connectionString = "Data Source=DWH; User Id=readonly; Password=*******;";

                OracleConnection con = new OracleConnection();
                con.ConnectionString = connectionString;
                con.Open();
                OracleCommand cmd = con.CreateCommand();
                cmd.CommandText = "SELECT * FROM SALARIES";
                cmd.CommandType = CommandType.Text;
                OracleDataReader dr = cmd.ExecuteReader();
                DataTable dt = new DataTable();
                dt.Load(dr);
                DataGrid1.ItemsSource = dt.DefaultView;             
                con.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }



<Window x:Class="OPEN_ORDERS_ORACLE_TABLE.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:OPEN_ORDERS_ORACLE_TABLE"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800" Loaded="Window_Loaded">
    <Grid Height="419" VerticalAlignment="Top">
        <DataGrid x:Name ="DataGrid1" ItemsSource="{Binding}" Margin="10,40,10,70"/>
    </Grid>
</Window>


78 Beiträge seit 2016
vor 5 Jahren

Auch wenn das oben schon gesagt wurde. Nochmal verstärkt für die Nachwelt.
Auch wenn MVVM nicht gerade einfach für Anfänger aussieht, sollten man das so nicht bauen!
Auch wenn der Code erstmal das tut was er tuen soll.
Später wird sowas die Wartungshölle!
All dein Code in Window_Loaded zu packen ist etwa so wie: Beim Hausbau die Heizungsinstallation im Vorgarten installieren zu lassen - Kann man machen, ist halt nicht wirklich gut

http://dotnet-paderborn.azurewebsites.net/

2.298 Beiträge seit 2010
vor 5 Jahren

All dein Code in Window_Loaded zu packen ist etwa so wie: Beim Hausbau die Heizungsinstallation im Vorgarten installieren zu lassen - Kann man machen, ist halt nicht wirklich gut

Der Vergleich hinkt. Eher müssten Vorgarten und Wasseranschlüsse im Wohnzimmer verbaut sein.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |