Autor Beitrag
Deutron
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Do 21.04.11 10:14 
Hi komme nicht weiter :(
Ziel ist es 2 Tabellen in einer XML auszugeben, das Problem liegt im DataReader habe jetz extra eine Textbox statt Variable in ihn gelegt um zu sehen ob überhaupt was kommt.
Da die Tb leer bleibt bin ich aber ein wenig überfordert.





ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
private void button6_Click(object sender, RoutedEventArgs e)
        {
        

            OleDbConnection con = new OleDbConnection();

            con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;data source=C:\\....accdb";

            string sql = ("SELECT * FROM tblinvoiceheader where fldid = '" + tbdelete.Text + "'");

            OleDbCommand cmd = new OleDbCommand(sql, con);

            con.Open();


            OleDbDataReader reader = cmd.ExecuteReader();

            while (reader.Read())
            {
                textBox1.Text = "" + (reader.GetString(0)) + "";
            }
            reader.Close();
            con.Close();


            OleDbDataAdapter da = new OleDbDataAdapter("Select * from tblinvoiceheader WHERE fldid = '" + tbdeladdress.Text + "'", con);
            OleDbDataAdapter da1 = new OleDbDataAdapter("Select * from tbladdress WHERE fldid = '" + textBox1.Text + "'", con);
            DataSet dsrechnung = new DataSet();
            da.Fill(dsrechnung, "Rechnungskopf");
            da1.Fill(dsrechnung, "Adressen");

            dsrechnung.WriteXml("C:\\...");
                
           
        }


Moderiert von user profile iconKha: C#-Tags hinzugefügt
qwertzio
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Do 21.04.11 10:24 
hoi,
hier mal meine lösung aber für alle 3 tabellen:

man gibt die "Rechnungs-ID" an nach welcher gefiltert werden soll also aus tblinvoiceheader.
dann werden die werte in den Dataset geschrieben.
danach wird über die rechnungsID noch die masterid der tblinvoicedetails ermittelt um auch´diese in den dataset zu bringen und danach wird die addressid aus der tblinvoiceheader mit einem datareader ermittel um dann die fldid aus der tbl address zu bekommen:


ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
                OleDbConnection con = new OleDbConnection(
           @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\svn\Azubi\Völk Dennis Lukas\Datenbank\prakdb.accdb");

                int eingabe = Convert.ToInt16(textBoxEingabe.Text);
                string addressid = "";
                string dateiname = textBoxDateiname.Text;

                OleDbDataAdapter oledbAdapter;
                DataSet ds = new DataSet();



                string strInvoiceheader = "SELECT * FROM tblinvoiceheader WHERE fldid='" + eingabe + "'";
                string strInvoicedetails = "SELECT * FROM tblinvoicedetails WHERE fldmasterid = '" + eingabe + "'";


                con.Open();

                oledbAdapter = new OleDbDataAdapter(strInvoiceheader, con);

                oledbAdapter.Fill(ds, "tblinvoiceheader");

                oledbAdapter.SelectCommand.CommandText = strInvoicedetails;
                oledbAdapter.Fill(ds, "tblinvoicedetails");


                //Reader für Invoiceheader tabelle
                OleDbCommand invoiceheader = new OleDbCommand(strInvoiceheader, con);
                OleDbDataReader dr_invoiceheader = invoiceheader.ExecuteReader();

                // addressid aus der Db in einer variable speicher um sie später einzufügen
                while (dr_invoiceheader.Read())
                {
                    addressid += dr_invoiceheader[2].ToString();

                }


                // SQL befehle für die address tabelle
                string strAddress = "SELECT * FROM tbladdress WHERE fldid='" + addressid + "'";

                oledbAdapter.SelectCommand.CommandText = strAddress;
                oledbAdapter.Fill(ds, "tbladdress");



                oledbAdapter.Dispose();


                con.Close();



                StreamWriter myStreamWriter = new StreamWriter(@"C:\\svn\\Azubi\\Völk Dennis Lukas\\XML-Dateien\\" + dateiname + ".xml");

                ds.WriteXml(myStreamWriter);
                myStreamWriter.Close();

                MessageBox.Show("XML-Datei wurde erstellt");



lg

Moderiert von user profile iconKha: C#-Tags hinzugefügt
Deutron Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Do 21.04.11 11:01 
bei deinem Lösungsvorschlag gibt er mir nach wie vor nicht die Adresstabelle mit aus
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Do 21.04.11 18:38 
Hallo,

erstmal: könntet Ihr beide mal bitte Code in <span class="inlineSyntax"></span>-Tags packen?
So kann man ihn kaum lesen. Gerade in Sachen Hochkommas.
Oh, gerade gesehen, dass das user profile iconKha für Euch erledigt hat.

Also, ich denke, das Problem ist folgendes:
ausblenden C#-Quelltext
1:
string sql = "SELECT * FROM tblinvoiceheader where fldid = '" + tbdelete.Text + "'";					
Denn fldid ist doch bestimmt eine Zahl und keine Zeichenkette, oder? Sollte zumindest so sein, wenn es schon id heißt.
Wenn es also ein int-Wert in der Datenbank ist, so wird mit dem Vergleich natürlich nichts gefunden. Also hat der Reader auch nichts zum lesen, bzw. es wird auch nichts in die Table im DataSet gefüllt. Und eine leere Tabelle erscheint auch nicht in der XML.
Also änder das Select (und das andere dann auch) so um:
ausblenden C#-Quelltext
1:
string sql = "SELECT * FROM tblinvoiceheader where fldid = " + tbdelete.Text + ";";					
Oder lieber gleich mit Parametern, wie es sich auch gehört:
ausblenden C#-Quelltext
1:
2:
3:
4:
string sql = "SELECT * FROM tblinvoiceheader where fldid = @value";
OleDbDataAdapter ad = new OleDbDataAdapter(sql, con);
ad.SelectCommand.Parameters.AddWithValue("@value", value);
...
LG

Für diesen Beitrag haben gedankt: Deutron