Laden...

Forenbeiträge von JJPhoenix Ingesamt 39 Beiträge

07.12.2012 - 13:18 Uhr

na doch, "@jetzt" war ja im ersten post ":jetzt" .

Aber gut, es funktioniert und ich danke für die Hilfe 😃

07.12.2012 - 13:13 Uhr

Edit, hast du zwar, aber bei Access ist nicht der Name des Parameters wichtig, sondern die reihenfolge des hinzufügens zur ParameterCollection

_REIHENFOLGE _, das war das Stichwort.....

 using (OleDbCommand cmd = new OleDbCommand("Update gps_mess set cprojekt=@projekt,cthema=@thema,cgisid=@gisid,cnutzung=@nutzung," +
                                "cbezeichnung=@bezeichnung,cmaterial=@material,csymbolname=@symbolname,cbemerkung1=@bemerkung1,cbemerkung2=@bemerkung2,vermesser=@vermesser,"+
                                "cmessart=@messmethode,cbaujahr=@baujahr,cort=@ort,cstrasse=@strasse,cstablaenge=@stablaenge,coberflaeche=@oberflaeche,cueberdeckung=@ueberdeckung,"+
                                "nradius=@radius,nz_nn=nz-diff_z_nn,d20=@jetzt where id=(Select max(id) from gps_mess)"))

Zorry aber das kann man einfach dann nur hinnehmen, und muss es nicht verstehen, warum die Reihenfolge da wichtig ist

07.12.2012 - 13:07 Uhr

...

Und hast Du den Parameter auch jetzt mal als DateTime probiert?
Edit, hast du zwar, aber bei Access ist nicht der Name des Parameters wichtig, sondern die reihenfolge des hinzufügens zur ParameterCollection

Sieh mal meinen post drüber... 😦

07.12.2012 - 13:00 Uhr

Habe es jetzt mal mit folgender Variante probiert:



 using (OleDbCommand cmd = new OleDbCommand("Update gps_mess set cprojekt=@projekt,cthema=@thema,cgisid=@gisid,cnutzung=@nutzung," +
                                "cbezeichnung=@bezeichnung,cmaterial=@material,csymbolname=@symbolname,cbemerkung1=@bemerkung1,cbemerkung2=@bemerkung2,vermesser=@vermesser,"+
                                "cmessart=@messmethode,cbaujahr=@baujahr,cort=@ort,cstrasse=@strasse,cstablaenge=@stablaenge,coberflaeche=@oberflaeche,cueberdeckung=@ueberdeckung,"+
                                "nradius=@radius,d20=@jetzt,nz_nn=nz-diff_z_nn where id=(Select max(id) from gps_mess)"))

.
.
.
.

  cmd.Parameters.Add("@jetzt",OleDbType.Date,32).Value= DateTime.Now;



der Debugger zeigt folgendes:

Now = {07.12.2012 12:56:36}

aber in der DB landet das hier: 01.01.1900 01:12:00

warum geht das beim Insert richtig, und beim Update nicht...

07.12.2012 - 11:17 Uhr

Hmm das war vom Testen....

habs mal rausgenommen:

aber dennoch D01:
07.12.2012 11:15:28

d20:
01.01.1900 01:12:00

ich verzweifle

ups da waren ja antworten zwischen...

Also der Aufruf der ganzen geschichte folgt über einen Button:


 FormAddInfos_DEFAULT frmAddInfos = new FormAddInfos_DEFAULT();
                //    FormAddInfos_TAV frmAddInfos = new FormAddInfos_TAV();

                    //nur wenn Form 'Zusatzinfos' mit Ok abgeschlossen wurde,
                    //dann DB-Update machen / versuchen ^^
                    //HauptGPSForm hauptform = new HauptGPSForm();
                    //hauptform.Visible = false;

                    if (frmAddInfos.ShowDialog(this) == DialogResult.OK)
                    {
                        String[] Str_zusatzinfos = new string[17];
                        Double[] Dou_zusatzinfos = new double[2];

                        Str_zusatzinfos[0] = frmAddInfos.Project;
                        Str_zusatzinfos[1] = frmAddInfos.Thema;
                        Str_zusatzinfos[2] = frmAddInfos.Gis_Id;
                        Str_zusatzinfos[3] = frmAddInfos.Nutzung;
                        Str_zusatzinfos[4] = frmAddInfos.Bezeichnung;
                        Str_zusatzinfos[5] = frmAddInfos.Material;
                        Str_zusatzinfos[6] = frmAddInfos.Symbolname;
                        Str_zusatzinfos[7] = frmAddInfos.Bemerkung1;
                        Str_zusatzinfos[8] = frmAddInfos.Bemerkung2;
                        Str_zusatzinfos[9] = frmAddInfos.Vermesser;
                        Str_zusatzinfos[10] = frmAddInfos.Messmethode;
                        Str_zusatzinfos[11] = frmAddInfos.Baujahr;
                        Str_zusatzinfos[12] = frmAddInfos.Ort;
                        Str_zusatzinfos[13] = frmAddInfos.Strasse;
                        Str_zusatzinfos[14] = frmAddInfos.Stablaenge;
                        Str_zusatzinfos[15] = frmAddInfos.Oberflaeche;
                        Str_zusatzinfos[16] = frmAddInfos.Ueberdeckung;

                        Dou_zusatzinfos[0] = frmAddInfos.ZusatzInfoRadius;
                       // Dou_zusatzinfos[1] = Convert.ToDouble(frmAddInfos.Stablaenge);


                        Str_TEMP_zusatzinfos = Str_zusatzinfos;
                        Dou_TEMP_zusatzinfos = Dou_zusatzinfos;

                        try
                        {
                            //int NewPoint = -1;
                            DB_Functions Point = new DB_Functions();

                            // in Temp Tabelle schubsen den Punkt
                            if (Point.PointUpdate(Str_zusatzinfos, Dou_zusatzinfos) != -1)
                            {
                                //MessageBox.Show(listViewTekCatchedPoints.Items.Count.ToString(), "Ausgabe");
                                listViewTekCatchedPoints.Items[0].SubItems[7].Text = Str_zusatzinfos[0];//Projekt
                                listViewTekCatchedPoints.Items[0].SubItems[6].Text = Str_zusatzinfos[1];//Thema
                                listViewTekCatchedPoints.Items[0].SubItems[8].Text = Str_zusatzinfos[2];//GisID
                                listViewTekCatchedPoints.Items[0].SubItems[9].Text = Str_zusatzinfos[3];//Nutzung
                                listViewTekCatchedPoints.Items[0].SubItems[10].Text = Str_zusatzinfos[4];//Bezeichnung
                                listViewTekCatchedPoints.Items[0].SubItems[5].Text = Str_zusatzinfos[7];//Bemerkung 1
                                listViewTekCatchedPoints.Items[0].SubItems[4].Text = Dou_zusatzinfos[0].ToString();
                            }
                            else
                            {
                                MessageBox.Show("Zusatzinfos nich erfasst.", "Zusatzinfos");
                            }
                        }
                        catch (OracleException ex)
                        {
                            MessageBox.Show(ex.ToString(), "Oracle-Fehlermeldung");

                            //buttons wieder auf default setzen
                            // cmdCADPointNew.Enabled = true;
                            // cmdCADPointData.Enabled = !(cmdCADPointNew.Enabled);
                            // cmdCADPointAbbruch.Enabled = !(cmdCADPointNew.Enabled);
                            // cmdCADPointFertig.Enabled = !(cmdCADPointNew.Enabled);
                            //evt hier noch ein Log-File schreiben              

                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.ToString(), "Sonstiger Fehler ist aufgetreten");
                            //evt hier noch ein Log-File schreiben
                        }
                        finally
                        {
                            // was dennoch nach allem passieren soll
                            //bla bla kp
                        }

                    }

Und sorry aber diese Klassen und OOP übersteigt leider mitlerweile meinen Horizont und ich bin ja froh das ich das alles eh so zum Laufen bekommen habe. Ausgegliedert ist die geschichte ja m.E. nach schon in Klassen.

07.12.2012 - 10:52 Uhr

Hallo,

in meiner Anwendung füge ich in eine Access-DB einen Datensatz ein, und update diesen später wieder. Was ich nur nicht nachvollziehen kann, ist, dass ersteres richtig ausgeführt wird und zweites nicht. Es geht um das Updaten eines Datumfeldes. ich möchte in ein Datumsfeld das Systemdatum reinschreiben, doch dort landen nur werte wie '01.01.1900 01:12:00' oder '31.12.1899 23:31:12'

Was jedoch beim Insert nicht der Fall ist.

hier die Code-Fragmente, bei denen das funktionert (INSERT).


  public int PointInsert(Double[] GkKoordinates, double sdo_typ, String[] GpsInfo)
        {
            int result = -1;
            decimal lastid = -1;
            string elem_id = "";

            DateTime today = DateTime.Now;
            lastid = getLastId() + 1;
            //lastid = 1;

            string jetzt = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
            
            //elem_id = lastid.ToString() + "_" + today.ToString("MM/dd/yyyy HH:mm:ss");
            elem_id = lastid.ToString() + "_" + today.ToString("dd/MM/yyyy HH:mm:ss");

            TekGPS.Properties.Settings mySettings = new Properties.Settings();// = null;

            switch (mySettings.MOSES_DB_TYPE)
            {

                case "oracle":

                   // try .... o.t.
                   

                    break;

                case "access":

                    try
                    {
                        using (TekGPS_Class_AccessDBTYPE ds = new TekGPS_Class_AccessDBTYPE())
                        {
                            using (OleDbCommand cmd = new OleDbCommand("insert into tekon_gps_mess(nx,ny,nz,nfolge,sdo_typ,elem_id,gps_anz_sat,gps_acc,gps_pdop,d01)" + 
                                "values(:nx,:ny,:nz,:nfolge,:sdo_typ,:elem_id,:gps_anz_sat,:gps_acc,:gps_pdop,:jetzt)"))
                            {

                                cmd.Parameters.Add(":nx", OleDbType.Double, 32).Value = GkKoordinates[0];
                                cmd.Parameters.Add(":ny", OleDbType.Double, 32).Value = GkKoordinates[1];
                                cmd.Parameters.Add(":nz", OleDbType.Double, 32).Value = GkKoordinates[2];
                                cmd.Parameters.Add(":nfolge", OleDbType.Double, 32).Value = 0;
                                cmd.Parameters.Add(":sdo_typ", OleDbType.Double, 32).Value = sdo_typ;
                                cmd.Parameters.Add(":elem_id", OleDbType.VarChar, 32).Value = elem_id;
                                cmd.Parameters.Add(":gps_anz_sat", OleDbType.VarChar, 32).Value = GpsInfo[0];
                                cmd.Parameters.Add(":gps_acc", OleDbType.VarChar, 32).Value = GpsInfo[1];
                                cmd.Parameters.Add(":gps_pdop", OleDbType.VarChar, 32).Value = GpsInfo[2];
                                cmd.Parameters.Add(":jetzt", OleDbType.Date, 32).Value = jetzt;

                                result = (int)ds.ACCESS_SQLInsertRow(cmd);
                            }
                        }
                    }
                    
                    catch (OleDbException ex)
                    {
                        MessageBox.Show(ex.ToString(), "Access-Fehlermeldung");
                        //evt hier noch ein Log-File schreiben              

                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.ToString(), "Sonstiger Fehler ist aufgetreten");
                        //evt hier noch ein Log-File schreiben
                    }
                    finally
                    {

                    }
            
                break; 

            }
            // ergebnis = ds.SqlUpdate(cmd);
            return result;
        }

Insert...


public int ACCESS_SQLInsertRow(OleDbCommand cmd)
        {
            int numberOfRecords = 0;
            //using (OleDbConnection connection = new OleDbConnection(connectionString))
            using (cmd.Connection = access_dbtype_connect)
            {

                try
                {
                    numberOfRecords = cmd.ExecuteNonQuery();

                }
                catch (Exception ex)
                {
                                    
                    string exStr = ex.ToString();
                    MessageBox.Show(exStr);
                }
              
            }  
            return numberOfRecords;
        }

So bis hierhin funktioniert alles und das richtige Datum ist in dieser Form in das Datumsfeld eingefügt..: '07.12.2012 10:24:00'

So und nun die Update funktion die nicht richtig funktioniert...


 public int PointUpdate(String[] Str_zusatzinfos, Double[] Dou_zusatzinfos)
        {
            int result = -1;

            string jetzt = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
               
            TekGPS.Properties.Settings mySettings = new Properties.Settings();// = null;

            switch (mySettings.MOSES_DB_TYPE)
            {

                case "oracle":

                    //Update Oracle geht

                break;

                case "access":

                    try
                    {
                        using (TekGPS_Class_AccessDBTYPE ds = new TekGPS_Class_AccessDBTYPE())
                        {
                            using (OleDbCommand cmd = new OleDbCommand("Update gps_mess set cprojekt=:projekt,cthema=:thema,cgisid=:gisid,cnutzung=:nutzung," +
                                "cbezeichnung=:bezeichnung,cmaterial=:material,csymbolname=:symbolname,cbemerkung1=:bemerkung1,cbemerkung2=:bemerkung2,vermesser=:vermesser,"+
                                "cmessart=:messmethode,cbaujahr=:baujahr,cort=:ort,cstrasse=:strasse,cstablaenge=:stablaenge,coberflaeche=:oberflaeche,cueberdeckung=:ueberdeckung,"+
                                "nradius=:radius,d20=:jetzt,nz_nn=nz-diff_z_nn where id=(Select max(id) from gps_mess)"))
                            {

                                cmd.Parameters.Add(":projekt", OleDbType.VarChar, 32).Value = my_replaceString(Str_zusatzinfos[0]);
                                cmd.Parameters.Add(":thema", OleDbType.VarChar, 32).Value = my_replaceString(Str_zusatzinfos[1]);
                                cmd.Parameters.Add(":gisid", OleDbType.VarChar, 32).Value = my_replaceString(Str_zusatzinfos[2]);
                                cmd.Parameters.Add(":nutzung", OleDbType.VarChar, 32).Value = my_replaceString(Str_zusatzinfos[3]);
                                cmd.Parameters.Add(":bezeichnung", OleDbType.VarChar, 32).Value = my_replaceString(Str_zusatzinfos[4]);
                                cmd.Parameters.Add(":material", OleDbType.VarChar, 32).Value = my_replaceString(Str_zusatzinfos[5]);
                                cmd.Parameters.Add(":symbolname", OleDbType.VarChar, 32).Value = my_replaceString(Str_zusatzinfos[6]);
                                cmd.Parameters.Add(":bemerkung1", OleDbType.VarChar, 255).Value = my_replaceString(Str_zusatzinfos[7]);
                                cmd.Parameters.Add(":bemerkung2", OleDbType.VarChar, 255).Value = my_replaceString(Str_zusatzinfos[8]);
                                cmd.Parameters.Add(":vermesser", OleDbType.VarChar, 32).Value = my_replaceString(Str_zusatzinfos[9]);
                                cmd.Parameters.Add(":messmethode", OleDbType.VarChar, 32).Value = my_replaceString(Str_zusatzinfos[10]);
                                cmd.Parameters.Add(":baujahr", OleDbType.VarChar, 32).Value = my_replaceString(Str_zusatzinfos[11]);
                                cmd.Parameters.Add(":ort", OleDbType.VarChar, 255).Value = my_replaceString(Str_zusatzinfos[12]);
                                cmd.Parameters.Add(":strasse", OleDbType.VarChar, 255).Value = my_replaceString(Str_zusatzinfos[13]);
                                cmd.Parameters.Add(":stablaenge", OleDbType.VarChar, 255).Value = my_replaceString(Str_zusatzinfos[14]);
                                cmd.Parameters.Add(":oberflaeche", OleDbType.VarChar, 255).Value = my_replaceString(Str_zusatzinfos[15]);
                                cmd.Parameters.Add(":ueberdeckung", OleDbType.VarChar, 255).Value = my_replaceString(Str_zusatzinfos[16]);
                                cmd.Parameters.Add(":radius", OleDbType.Double, 32).Value = Dou_zusatzinfos[0];
                                cmd.Parameters.Add(":diff_z_nn", OleDbType.Double, 32).Value = float.Parse(Str_zusatzinfos[14]) / 100;
                                cmd.Parameters.Add(":d20", OleDbType.Date, 32).Value = DateTime.Now.ToString();
                                cmd.Parameters.Add(":jetzt", OleDbType.Date, 32).Value = jetzt;

                                //result = (int)ds.ACCESS_SQLInsertRow(cmd);

                                result = (int)ds.ACCESS_SQLUPDATERow(cmd);
                                //ACCESS_SQLInsertRow

                                //cmd.Dispose();
                                cmd.Connection.Close();
                            }
                        }
                    }

                    catch (OleDbException ex)
                    {
                        MessageBox.Show(ex.ToString(), "Access-Fehlermeldung");
                        //evt hier noch ein Log-File schreiben              

                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.ToString(), "Sonstiger Fehler ist aufgetreten");
                        //evt hier noch ein Log-File schreiben
                    }
                    finally
                    {

                    }


                break;

            }

            // ergebnis = ds.SqlUpdate(cmd);
            return result;

        }


   public int ACCESS_SQLUPDATERow(OleDbCommand cmd)
        {
            int numberOfRecords = 0;
            //using (OleDbConnection connection = new OleDbConnection(connectionString))
            using (cmd.Connection = access_dbtype_connect)
            {

                try
                {
                    numberOfRecords = cmd.ExecuteNonQuery();

                }
                catch (Exception ex)
                {

                    string exStr = ex.ToString();
                    MessageBox.Show(exStr);
                }

            }
            return numberOfRecords;
        }

Das versuche ich echt schon seit Tagen in den Griff zu bekommen.. Ich hoffe ihr habt vielleicht ne Lösung..
2x das gleiche, nur einmal funktioniert es und das andere mal nicht..

24.01.2011 - 15:13 Uhr

Hmm nee, weil mit nem Sleep bekomme ich die Erfüllte bedingun, aber ohne leider nicht:


            Thread.Sleep(250);


            if (((IList<string>)my_sections).Contains(sectionToFind))
            {
                Settings_RFID_Tags.Read(sectionToFind);
                //ini.ReadValue(Reader_data, "FixCode", Settings_RFID_Tags.RFID_Tag.FixCode);
                MessageBox.Show(Settings_RFID_Tags.RFID_Tag.Bezeichnung, "BEZ");
            }

20.01.2011 - 16:21 Uhr

Hallo JJPhoenix,

warum kein XML? Damit wäre das ganze ein Kinderspiel.

Weil ich möchte dass der Kunde das Fehlerfrei editieren kann 😉

Geht so auch schon, aber vielleicht nochmal etwas kurioses: Kann es sein, daß ein Programm zu schnell arbeitet und irgendwas übersieht ? Klingt blöd, aber habe irgendwie keine Erklärung:




            String [] my_sections= ini.SectionNames();

            String sectionToFind = Reader_data.Trim();


            String my_temp_Bezeichnung = ini.ReadValue(Reader_data, "Bezeichnung", Settings_RFID_Tags.RFID_Tag.Bezeichnung);

            if (my_temp_Bezeichnung.Trim() != "")
            {
                MessageBox.Show("hatta", "BEZ");
            }

            if (((IList<string>)my_sections).Contains(sectionToFind))
            {
                Settings_RFID_Tags.Read(sectionToFind);
                //ini.ReadValue(Reader_data, "FixCode", Settings_RFID_Tags.RFID_Tag.FixCode);
                MessageBox.Show(Settings_RFID_Tags.RFID_Tag.Bezeichnung, "BEZ");
            }


warum bekomme ich immer nur eine zweite Messagebox, wenn die erste bedingung aktiv ist? Soll heissen, kommentiere ich die erste Bedingung aus, wird die zweite bedingung immer überflogen.

Wenn ich debugge, so mit Haltepunkten (VS 2008) komme ich auch in die zweite bedingung, also wenn alles schritt für schritt läuft dann gehts, bloß in einem Rutsch nicht? KOMISCH!

20.01.2011 - 13:57 Uhr

Ah ok danke, es war eine fertige Ini-File Klasse:

Das hier hatte ich noch einfügen müssen, jetzt bekomme ich ein Array mit den Sectionen:


        [DllImport("kernel32.dll")]
        private static extern uint GetPrivateProfileSectionNames(IntPtr lpszReturnBuffer,
           uint nSize, string lpFileName);

gibt es da dann eine Methode, die True zurückgibt wenn ein wert sich in dem Array befindet, oder muss ich das Array mit ner Schleife durchforsten?

Sorry aber ich mache in der Regel net so viel mit c#

20.01.2011 - 12:23 Uhr

Folgendes Szenario. Ich habe über die Comschnittstelle ein gerät ausgelsen bzw. ein RFID-Tag:

der hat ne serien nummer zum Beispiel von "chip 1"

dazu habe ich ein INI-File, in dem verschiedenene Tags definiert sind

ini-file:


[chip 1]
Bezeichnung=Standardladeschaufel
Typ=SKL85 3
Herstell_Nr=1196-10
Breite=2589
Teile_Nr=04637095007059
Betriebsdruck=0
Inhalt=1550
Gewicht=540
Traglast=1200


[chip 2]
Bezeichnung=Standardladeschaufel2
Typ=SKL85 4
Herstell-Nr.=1196-10
Breite=2200
Teile-Nr.=04637095007059
Betriebsdruck=
Inhalt=1550
Gewicht=540
Traglast=1200

[chip 3]
Bezeichnung=Standardladeschaufel3
Typ=SKL85 5
Herstell-Nr.=1196-10
Breite=2200
Teile-Nr.=04637095007059
Betriebsdruck=
Inhalt=1550
Gewicht=540
Traglast=1200

wie kann ich nun herrausfinden, ob zu dem ausgelesenen Chip eine Section in der Ini.Datei existiert?

Normales Zugreifen auf ein Value geht ja. Nur muss ich irgendwie rausbekommen OB ein eintrag existiert oder nicht, also irgendwie die Sections ansprechen.

Danke schonmal.

06.12.2010 - 12:10 Uhr

Hmm da bekomme ich immer nur die Programmversion, wie vorher auch schon raus.

Es geht um 2 Dll´s die jeweils die Version 2.42 haben, die ich unter Verweise hinzugefügt habe, diese Versionsnummern benötige ich zur Laufzeit.

06.12.2010 - 11:33 Uhr

Hallo,

gibt es irgendwie eine Möglichkeit die Versionsnummern der *.dll rauszubekommen, die man unter Verweise hinzugefügt hat?
Wenn ja, könnt ihr mir da evtl nen Tip geben?

MFG Jörg!

11.08.2010 - 13:39 Uhr

Hallo Gemeinde,

Ne weile ist es her, als ich an meinem Projekt in C# gearbeitet habe, nun muss ich dieses jedoch wieder aufgreifen.

Zur Anwendung:
Es ist eine Datenbankanwendung die derzeit nur für Oracle konzepiert ist. Lizenztechnisch soll ich nun aber auch den Zugriff auf ne ACCESS-Datenbank-Datei realisieren.

ich habe im Moment ne Klasse für die Ora-DB:


namespace TekGPS
{
    class TekGPS_Oracle() : IDisposable

    {
        void IDisposable.Dispose() { }
        public void Dispose() { }

        public string ora_db_host = ConfigurationSettings.AppSettings["ORACLE_DB_HOST"].ToString();
        public string ora_db_user = ConfigurationSettings.AppSettings["ORACLE_DB_USER"].ToString();
        public string ora_db_pass = ConfigurationSettings.AppSettings["ORACLE_DB_PASS"].ToString();
        OracleConnection ora_db_connect;



        public TekGPS_Oracle()
        {
            //Konstr
            this.ora_db_host = ora_db_host;
            this.ora_db_user = ora_db_user;
            this.ora_db_pass = ora_db_pass;
            this.login();
        }

        public string login()
        {
            string oradb = "Data Source=" + this.ora_db_host + ";User Id=" + this.ora_db_user + ";Password=" + this.ora_db_user + ";";
            ora_db_connect = new OracleConnection(oradb);
            ora_db_connect.ConnectionString = oradb;
            ora_db_connect.Open();
            return ora_db_connect.ConnectionString;
        }

        ~TekGPS_Oracle()
        {
            //destr
        }

    }

}

und eine für die DB-Functions:


namespace TekGPS
{
    class OraFunction
    {
        public OraFunction()
        {

        }

       // ein paar Methoden und SQL-Queries..... 
public decimal getLastId()
        {
            decimal lastid = -1;
            using (TekGPS_Oracle ds = new TekGPS_Oracle())
            {
                using (OracleCommand cmd = new OracleCommand("SELECT max(id) FROM tabelle"))
                 {
                     lastid = (decimal)ds.SqlSelectRowValue(cmd);
                     cmd.Dispose();
                    cmd.Connection.Close();
                }
            }

            return lastid;
        }
}
}

bisher speichere ich die Zugangsdaten in der App.config. Nun möchte ich aber gerne, dass ein Benutzer zwischen Oracle und Access switchen kann, hier für dachte ich an eine Klassische Form(OptionButton und Textfelder für die Zugangsdateneingabe) und halt Filedialog um die *.mdb auszuwählen.

Das ist soweit auch schon fertig. Nur wie kann ich nun die Auswahl abspeichern, soll heißen wenn das Programm das nächste mal gestartet wird, diese Einstellungen wieder aufgerufen werden und nicht aus der Section "<appSettings>" genutzt werden. Ebenso zur Laufzeit des Programms. Hat da jemand nen Vorschlag, wie man das am Besten realisieren könnte? Irgendwie mit Globalen Variablen oder so was? Per Default ist ja beim Erststart Oracle gewählt, sollte der User dann wechseln sollen die Auswahl und die dementsprechenden Zugangsdaten ja auch genutzt werden. oder kann man die Klasse mit Parametern ansteuern?

Bin schonmal für jede Hilfe oder Lösungsvorschlag Dankbar

LG

12.02.2009 - 20:17 Uhr

Ich glaube, da bekommt man ne 30 Tage Version, nachdem man sich gereggt hat.

ich selber nutze das Studio 5.5, war aber net billig damals.
Immo gibt es glaube die Version 6.

LG und check das ruhig mal.

12.02.2009 - 19:09 Uhr

Hallo!

Hast du evt schonmal nach dem ZEND-Studio Ausschau gehalten?

LG

12.02.2009 - 17:36 Uhr

Hallo!

Wie der Titel es schon aussagt, habe ich folgendes Problemchen.

Ich benutze auf meiner Windows-Form mehrere unterschiedliche Steuerelemente.

Durch die Eigenschaften eines Buttons zum Beispiel bei FlatStyle "Standart" bekomme ich diesen auch so schön XP-Like dargestellt, die GroupBox ebenfalls rund und der Rand in Blau.
Nur ein Problem habe ich bei der ProgressBar. Diese wird in sonnem schnöden win2000-Look dargestellt, zumindest beim Ausführen des Programms. In dem Form Designer jedoch so farbig und ebenfalls im XP-Look. Leider finde ich keine Eigenschaften, die das ändern könnte.
Habt ihr da evt. ne Lösung?
Habe auch schon hier im Forum gesucht und gegoogelt.
Durch:

Application.EnableVisualStyles();

beim Laden der Form hat es leider nur Auswirkungen auf die Buttons und die GroupBox.

LG

11.02.2009 - 13:12 Uhr

Hmm was ist denn da bitte nun die günstigste Lösung, also die "Beste" ^^ ?

ich meine ich kann ja auch List-elemente in ein <dictionary> speichern, oder?

Also was wäre denn für meine Zwecke am geeignetsten? Ehe ich wieder mich ein ein Thema reinlese, anfange "code" zu produzieren, und anschließend doch lese, dass diese Arte von Elementen sein NET 2.0 nicht mehr verwendet werden sollten oder durch "blab blub" abgelöst wurde.

😜 X(

11.02.2009 - 09:35 Uhr

Hallo und guten morgen, da ich irgendwo gelsen habe, daß ArrayList wohl net mehr so verwendet werden soll.

bin jetzt dabei mich mit diesem List<Object>.. element mal zu befassen, habe da auch schon werte in Array-ähnlicher Form reinbekommen, nur muss ich mal schauen, wie man das dann auslesen kann. Ich bräuchte irgendwie einen Pointer den ich über nen Namen ansprechen kann.

LG

10.02.2009 - 21:58 Uhr

while(dr.Read()){
                    decimal x = (decimal)dr.GetValue(0);
                    decimal y = (decimal)dr.GetValue(1);  
                    decimal[,] nresult = new decimal[x, y];             
                    //kresult[i][0] = x;
                    //kresult[i][1] = y;
                    Console.WriteLine(dr.GetValue(0));
                    Console.WriteLine(dr.GetValue(1));
                    i++;
                }

Der Typ "decimal" kann nicht implizit in "int" konvertiert werden. Es ist bereits eine explizite Konvertierung vorhanden. (Möglicherweise fehlt eine Umwandlung.)

fehler bei decimal[,] nresult = new decimal[x, y];
Das verstehe ich jetzt mal gar nicht. Sind doch oben auch als decimal deklariert.. 😦

10.02.2009 - 21:42 Uhr

Hallo zusammen!

Ich möchte Daten aus ner Datenbank auslesen, in ein Array speichern und anschliessend zurückgeben.


   public double Sql_Select_Decimal(OracleCommand cmd)
        {
            double result=3.4;
            int i = 0;
            using (cmd.Connection = ora_db_connect)
            {
                cmd.CommandType = CommandType.Text;
                
                OracleDataReader dr = cmd.ExecuteReader();
                decimal[][] kresult = { new decimal[2] };
                while(dr.Read()){
                    decimal x = (decimal)dr.GetValue(0);
                    decimal y = (decimal)dr.GetValue(1);
                                       
                    kresult[i][0] = x;
                    kresult[i][1] = y;
                    Console.WriteLine(dr.GetValue(0));
                    Console.WriteLine(dr.GetValue(1));
                    i++;
                }
                dr.Close();
                //result = (string) (dr.GetOracleString(0));
                //Console.WriteLine(result.GetString(0));  

            }

            cmd.Connection.Close();
            cmd.Dispose();

            return result;

        }

Das abfragen funktioniert soweit auch alles bestens, ich bekomme in der Console die richtigen werte angezeigt, sogar für alles Datensätze, allerdings nur wenn ich mir die Daten ausgeben lass und nicht versuche in ein Array zu schreiben:
4431569,8340
5764019,4960
4431575,10
5764006,6350
4431577,8490
5763997,7860

sind jedoch die Zeilen:

                    
kresult[i][0] = x;
kresult[i][1] = y;

aktiv bekomme ich ne fehlermeldung nach dem ersten Durchlauf der While-Schleife:

"System.IndexOutOfRangeException"

nun möchte ich diese Daten aber ums Verecken in ein Array speichern, wie man evt. aus dem Code oben entnehmen kann. Und das in folgender struktur:

result[0]->[x][y]
result[1]->[x][y]
result[2]->[x][y]

kann mir da jemand helfen

Das ist erst der Anfang, es sollen ja noch mehr werte in diese Array mit unterschiedlichen Datentypen

LG JJPhoenix

19.01.2009 - 13:07 Uhr

WOW, ich hoffe ich habe euch nicht alle um eure Mittagspause gebracht^^.
@ Jürgen wie du es gesehen hast, stimmt wohl:

  cmd.CommandType = CommandType.Text;

                    object bla = cmd.ExecuteScalar();
                   // result = Convert.ToInt32(cmd.ExecuteScalar());
                    Console.WriteLine("Typ: " +bla.GetType());
                   

bringt mir ein:

Typ: System.Decimal

Soll also heissen, dass ich entweder mit dem alten convert.... weiter machen kann, oder halt alles in decimal umstelle, oder?

19.01.2009 - 11:28 Uhr

using Oracle.DataAccess.Client; 
using Oracle.DataAccess.Types;

hier nochmal die methode dazu:

public int SqlSelectRowValue(OracleCommand cmd)
        {
            int result = -1;

                using (cmd.Connection = ora_db_connect)
                {
                    cmd.CommandType = CommandType.Text;                    
                    
                    //result = Convert.ToInt32(cmd.ExecuteScalar());
               
                    result = (int)cmd.ExecuteScalar();
                    //string gna = Convert.ToString(cmd.ExecuteScalar());

                }

            cmd.Dispose();

            cmd.Connection.Close();

            return result;

        } 
19.01.2009 - 10:04 Uhr

"system.invalidCastExeption: Die angegebene Umwandlung ist ungültig"

kommt dann.

mit

result = Convert.ToInt32(cmd.ExecuteScalar());

klappt es allerdings

17.01.2009 - 11:22 Uhr

Außerdem benutzt Du immer noch Convert.ToInt32 statt (int); und die Variable gna mit Convert.ToString steht sinnlos in der Gegend herum.

hmm ja aber ne convertierung meckert VS mir an:

result = (int)(cmd.ExecuteScalar());

17.01.2009 - 10:19 Uhr

Hallo, heute wieder Zeit weiter zu machen.
Folgende Methode habe ich mir für diese Abfrage geschrieben, und auch das berücksichtigt, was ich aus euren Antworten heraus verstanden habe.

 public int getMaxNfolge(string c01, string c02, string c03)
        {                    
            int maxnfolge = -1;
            using (TekGPS_Oracle ds = new TekGPS_Oracle())
            {
                using (OracleCommand cmd = new OracleCommand("SELECT max(nfolge) FROM tabelle WHERE c01=:c01 and c02=:c02 and c03=:c03"))
                //using (OracleCommand cmd = new OracleCommand("SELECT count(*) FROM tabelle  WHERE c01=:c01 and c02=:c02 and c03=:c03"))
                {
                    //cmd.CommandType = CommandType.Text;
                    cmd.Parameters.Add(":c01", OracleDbType.Varchar2, 32).Value = c01;
                    cmd.Parameters.Add(":c02", OracleDbType.Varchar2, 32).Value = c02;
                    cmd.Parameters.Add(":c03", OracleDbType.Varchar2, 32).Value = c03;                    

                    maxnfolge = ds.SqlSelectRow(cmd);
                    MessageBox.Show(maxnfolge.ToString(),"Ausgabe maxnfolge");
 
                }
            }    

            return maxnfolge;      
        }

hier die methode aus meiner Oracle Klasse um eine Zeile abzufragen:

 public int SqlSelectRow(OracleCommand cmd)
        {

            int result = -1;

                using (cmd.Connection = ora_db_connect)
                {
                    cmd.CommandType = CommandType.Text;
                    
                    
                    result = Convert.ToInt32(cmd.ExecuteScalar());
               
                    string gna = Convert.ToString(cmd.ExecuteScalar());

                }

            cmd.Dispose();

            cmd.Connection.Close();

            return result;

        }   

Das funktioniert auch soweit, bekomme nach dem eintragen des ersten Datensatzes eine 0 als ausgabe., nach anlegen eines zweiten DS mit meinen 3 Parametern dann die 1 als maxnfolge. ALso bin ich soweit schonmal zufrieden.

nur wenn ich im Visual STudi mir nen haltepunkt an diese stelle setze

result = Convert.ToInt32(cmd.ExecuteScalar());

bekomme ich da unter der maus keinen intwert in dem sinne sondern:
result=0x00000000
woran liegt das ?

Und habe ich das denn nun richtig mit diesen Using blöcken umgesetzt?

12.01.2009 - 19:49 Uhr

Hallo,

von welchem Typ ist nfolge? Wenn es ein int ist, dann ist auch max(nfolge) ein int; also kannst Du auf to_number verzichten und den Wert direkt übernehmen:

string commandString = "SELECT max(nfolge) FROM ...";  
...  
int ergebnis = (int)cmd.ExecuteScalar();  

Im übrigen möchte ich Dir nochmals meine Hinweise mit den using-Blöcken aus
>
ans Herz legen. Außerdem sollten Sql-Befehle mit variablen Inhalten niemals (wie bei Dir) durch String-Verknüpfung erstellt werden, sondern dafür immer **Parameters **benutzt werden.

Jürgen

ja ich habe den String auch nur jetzt aus verzweifelung so fest geschrieben.

sonst läuft das mittlerweile so:

            
cmd.Parameters.Add(":c01", OracleDbType.Varchar2, 32).Value = c01;
cmd.Parameters.Add(":c02", OracleDbType.Varchar2, 32).Value = c02;
cmd.Parameters.Add(":c03", OracleDbType.Varchar2, 32).Value = c03;

Habe das ergebnis mal in nen String geparst.
Ein "select count(*) gibt mir auch korrekte Anzahl von 16 zurück, ergo funzt das mit executescalar() --> ausgeschlossen 😉

Also muss iwas mit max(nfolge) falsch sein, weil folgender Query geht problemlos:
"SELECT count(*) FROM tabelle where c02='ALK' and c03='E1000'"

hmm das feld vom Datentyp her ist Number

12.01.2009 - 19:13 Uhr

verwendetes Datenbanksystem: <ORACLE>

Hallo,

ich habe (mal wieder ein Prob):

nachdem ich mir so ziemlich 500 Beiträge im Netz zum Thema: ExecuteScalar() angeschaut habe, will ich hier doch mal nen neuen Beitrag aufmachen. Bitte schiebt ihn nicht gleich in die Tonne.

habe ne Methode, die mir lediglich nen Integer-Wert aus ner DB-Abfrage ausgeben soll.


 public int SqlSelectRow(OracleCommand cmd)
        {
            cmd.Connection = ora_db_connect;
            cmd.CommandType = CommandType.Text;
           
            int ergebnis = -1;

           ergebnis = Convert.ToInt32(cmd.ExecuteScalar());
  
            cmd.Dispose();

            cmd.Connection.Close();
            
            return ergebnis;

        }   

Das hier aus dem Überwachungsfenster:

CommandText "SELECT to_number(max(nfolge)) FROM tabelle WHERE c01='1' and c02='ALK' and c03='E1000'" string

Die abfrage mit nem SQL-Tool liefert mir den richtigen wert von "1",

ich bekomme dann aber ne Exeption, die wie folgt aussieht:

{"Ein Objekt kann nicht von DBNull in andere Typen umgewandelt werden."}

Habe ich da irgendwie nen Denkfehler, oder etwas übersehen?

11.01.2009 - 13:08 Uhr

aber wie gebe ich das result dann mit return zurück an den aufruf der methode um es auszuwerten?

*edit:
oder anders:

wenn das update mit:


result = cmd.ExecuteNonQuery();

erfolgreich war steht ja in result die anzahl der betroffenen Datensätze als int.

ANdernfalls ja die exeption als string 😒

11.01.2009 - 12:59 Uhr

Hallo!

JJPhoenix und C# die 10te oder so... ;-P

Folgendes Problem:

public void  SqlUpdate(OracleCommand cmd)
        {

            int result;

            try
            {
                //OracleCommand cmd = new OracleCommand(SqlQry);

                cmd.Connection = ora_db_connect;
                cmd.CommandType = CommandType.Text;
               
                result = cmd.ExecuteNonQuery();
            }
        
            catch (OracleException e)
            {
                
               // hier dann was machen, wenn Oracle-Fehler auftritt.
                //Console.WriteLine("Fehlermeldung: {0}", e.ToString());

                //System.Data.OracleClient.OracleException

            }
            finally
            {
                cmd.Dispose();        
                cmd.Connection.Close();
            }

        }

Wie kann ich dann beim Aufruf der Methode einen Oracle-Fehler auswerten? Z.B. in Form einer MBox?

ds.SqlUpdate(cmd);

Oder muss ich das dann auch nochmal in einer "Try-Catch" Anweisung aufrufen?

Ziel soll es sein, dass beim erfolgreichen SQl-Qry absetzen ein true zurückgegeben wird, und beim erfolglosen logischerweise ein false und am BEsten noch die Oracle fehlermeldung die ja schon in "OracleException e" steht.

09.01.2009 - 18:43 Uhr

So, danke für die Hilfe, habe es nun mit den Parametern wie folgt gelöst:

        
public void PointInsert(string c01,string c02,string c03,Double [] GkKoordinates)
        {

                TekGPS_Oracle ds = new TekGPS_Oracle();

                OracleCommand cmd = new OracleCommand("INSERT INTO tabelle(c01,c02,c03,nx,ny,nz) VALUES ( :c01, :c02, :c03, :nx, :ny, :nz)");

                cmd.Parameters.Add(":c01", OracleDbType.Varchar2, 32).Value = c01;
                cmd.Parameters.Add(":c02", OracleDbType.Varchar2, 32).Value = c02;
                cmd.Parameters.Add(":c03", OracleDbType.Varchar2, 32).Value = c03;
                cmd.Parameters.Add(":nx", OracleDbType.Double, 32).Value = GkKoordinates[0];
                cmd.Parameters.Add(":ny", OracleDbType.Double, 32).Value = GkKoordinates[1];
                cmd.Parameters.Add(":nz", OracleDbType.Double, 32).Value = GkKoordinates[2];


                ds.SqlUpdate(cmd);

           
        }

*Kann geclosed werden.

09.01.2009 - 10:09 Uhr

Guten Morgen liebe Gemeinde,

ich habe mal wieder ein kleines Problemchen.

nachdem ich es nun hinbekommen habe, aus nem string ein double zu machen(glaube ich zumindest) möchte ich ein Array an eine Methode übergeben und anschliesend in die DB schubsen.

habe ein array erstellt mit 3 double-Werten:

Double[] gk_koordinates = {gkx, gky ,gkz}; 
  •   gk_koordinates	{double[3]}	double[]  
      [0]	4431576.373	double  
      [1]	5763919.893	double  
      [2]	-20.396	double  
    

also fein säuberlich mit nem punkt als Dezimal-Trennzeichen.

wenn ich diesen Wert nun übergebe an meine Methode:

 
        public void PointInsert(string c01,string c02,string c03,Double [] GkKoordinates)
        {
            TekGPS_Oracle ds = new TekGPS_Oracle();
            
            string qry = "INSERT INTO tabelle(c01,c02,c03,nx,ny,nz) VALUES ('" + c01 + "','" + c02 + "','" + c03 + "'," + GkKoordinates[0] + "," + GkKoordinates[1] + "," + GkKoordinates[2] + ")";
            
            string ergebnis = ds.SqlQuery(qry, "upd");

            //return ergebnis;
        }

mit folgendem Aufruf:

Point.PointInsert(frm_NewElement.C01.ToString(), frm_NewElement.C02.ToString(), frm_NewElement.C03.ToString(), gk_koordinates);

der query sieht dann aber folgendermaßen aus:


"INSERT INTO tabelle(c01,c02,c03,nx,ny,nz) VALUES ('45','ALK','E1000',4431576,373,5763919,893,-20,396)"	

Also irgendwie sind die Punkte durch Komma erstetzt, woran liegt das?

LG

07.01.2009 - 15:28 Uhr

.Trim() ich depp hatte die () vergessen. Aus dem php kannte ich das bisher eher so trim(text) und net andersherum a la text.trim() ;-P


cmd_insert.Enabled = !(String.IsNullOrEmpty(txt_c01.Text.Trim()) || String.IsNullOrEmpty(txt_c02.Text.Trim()) || String.IsNullOrEmpty(txt_c03.Text.Trim()));

OK THX a lot!

LG

Kann dann als gelöst markiert werden

07.01.2009 - 15:07 Uhr

So ist natürlich noch schicker, danke dafür!

PS das "<>" war nur Pseudo, stand ja auch da, werde es denke als bald nicht mehr verwenden....

Aber Leerzeichen überprüft "IsNullOrEmpty" net oder ?

weil mit ".trim" will das net so funzen

LG

07.01.2009 - 14:31 Uhr

Na aber das muss ich dann in jedem Textfeld machen, oder wie sehe ich das?

Wollte irgendwie ne Routine haben, die das kontinuierlich prüft, oder geht das nicht so ohne Weiteres?

LG

07.01.2009 - 13:53 Uhr

Hallo zusammen,

erst einmal wünsche ich allen ein gesundes neues Jahr.
Ich habe für die meisten wahrscheinlich nur ein kleines Problem.

Ich habe eine Form, auf der 3 Textfelder und 2 Button sind.

Einer dieser Button (der Ok-Button) soll allerdings nur dann benutzbar sein, wenn diese 3 Felder ausgefüllt sind. Allerdings will ich diesen Zustand nicht immer dann abfragen, wenn eine Eingabe in den Textfeldern erfolgt sondern irgenwie dauerhaft und kontinuierlich.

Also cmd_ok.enabled = textfeld.text<>""; so als Pseudo

Habt ihr da ne lsg oder evt nen Link dazu?

LG JJPhoenix

22.12.2008 - 11:46 Uhr

Hallo, Danke an alle, die mir dabei so weit geholfen haben.

Hat alles gut geklappt.
@ BerndFfm: Danke nochmal für diese Links zusätzlich.

Ist somit gelöst das Problem.

LG

18.12.2008 - 12:35 Uhr

Unter den vielen C#-Foren im Netz, ..

ich dachte, es gebe nur uns! 😄

Jetzt ja 😉

Danke für deine Hilfe. Eine Frage habe ich noch.

Wann mache ich am besten den Connect zur DB wieder zu (und wie ?), oder passiert das automatisch? Weil ich zigmal ja dann auf die DB zugreifen werden muss a la Methoden getPoints() und ähnliche.
Ist der Speicher dannach wieder "sauber" und ist es sinnvoll bei jedem sql-Statement was ich an die Db schicke ne neue conn aufzumachen?

Ok, mehr als eine Frage 😉

18.12.2008 - 11:50 Uhr

Hallo zusammen.

Unter den vielen C#-Foren im Netz, habe ich mich nun für dieses hier entschieden. Wird wohl die richtige Wahl gewesen sein. 😉 Bin eigentlich noch ein gewaltiger Anfänger was C# und vor allem OOP angeht.

Also nun mal zu meinem Problem:

in meinem Programm benötige ich Zugriff auf eine Oracle DB. Dafür schrieb ich mir ne Klasse, die den Connect ausführen soll und noch so ein paar kleine Methoden beinhalten soll wie z.b. SQL-Queries ausführen (Denke das macht Sinn).
Folgender Code Dazu erstmal:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data; 
using Oracle.DataAccess.Client; // ODP.NET Oracle managed provider
using Oracle.DataAccess.Types;
using System.Configuration;
using System.Collections;
using System.Diagnostics;

namespace TekGPS
{
    class TekGPS_Oracle
    {
        string ora_db_host = ConfigurationSettings.AppSettings["ORACLE_DB_HOST"].ToString();
        string ora_db_user = ConfigurationSettings.AppSettings["ORACLE_DB_USER"].ToString();
        string ora_db_pass = ConfigurationSettings.AppSettings["ORACLE_DB_PASS"].ToString();
        OracleConnection ora_db_connect;

        public TekGPS_Oracle()
        { 
            //Konstr

            this.ora_db_host = ora_db_host;
            this.ora_db_user = ora_db_user;
            this.ora_db_pass = ora_db_pass;
            this.ora_db_connect = new OracleConnection();
            //this.ora_db_connect = new OracleConnection("Data Source=" + ora_db_host + ";User Id=" + ora_db_user + ";Password=" + ora_db_user + ";");

            //this.login();
        }

       

        public string login()
        {
            string oradb = "Data Source=" + this.ora_db_host + ";User Id=" + this.ora_db_user + ";Password=" + this.ora_db_user + ";";
            OracleConnection ora_db_connect = new OracleConnection(oradb); 
            ora_db_connect.ConnectionString = oradb;
            ora_db_connect.Open();
            return ora_db_connect.ConnectionString;
        }

        public string  SqlQuery(string SqlQry, string SqlType)
        {
            this.login();

            OracleCommand cmd = new OracleCommand();
            cmd.Connection = ora_db_connect;
            cmd.CommandText = SqlQry;
            cmd.CommandType = CommandType.Text;
            string result = "";

            switch (SqlType)
            {
                case "sel":

                    OracleDataReader dr = cmd.ExecuteReader();
                    dr.Read(); 

                    while (dr.Read())
                    {
                        result = result + dr["c01"].ToString();
                    }

                    dr.Dispose();
                    cmd.Dispose();
                    ora_db_connect.Dispose();
                    
                    break;

                default:

                    break;
            }

            return result;
        }
       

        ~TekGPS_Oracle()
        {
            //destr
        }
    }
}

dann möchte ich eine Funktionsbibliothek anlegen, in der ich ähm ja klar meinen eigene Funktionen, die ich brauche ablegen möchte.
FRAGE 1 :
Geht das nur in einer Klasse?

Dazu folgender Code in einem anderen Codefile:
ist nur erstmal zum testen ob da was bei rumkommt. will nur ein paar IDs aneinander hängen und zurückgeben.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Diagnostics;
using Oracle.DataAccess.Client; // ODP.NET Oracle managed provider
using Oracle.DataAccess.Types;
using System.Data;

namespace TekGPS
{
    class OraFunction
    {
        public OraFunction()
        {

            
        }

        public string getPoints()
        {
            TekGPS_Oracle ds = new TekGPS_Oracle();
            
            string ergebnis = ds.SqlQuery("SELECT id FROM tabelle WHERE ROWNUM<10", "sel");

            return ergebnis;
        }

    }
}


Soweit so gut. Keine Fehler beim erstellen.
Jetzt möchte ich aber gern diese Methode getPoints aus meiner Anwendung heraus aufrufen.


        private void cmd_newArea_Click(object sender, EventArgs e)
        {
           OraFunction Points = new OraFunction();


           Points.getPoints();
            
          
        }

Funktioniert soweit auch ganz gut, der debugger springt dann allerdings in die Zeile:
OracleDataReader dr = cmd.ExecuteReader();
mit der Fehlermeldung :
"Für diesen Vorgang muss die Verbindung geöffnet sein"

Frage 2: Ja logo aber ich dachte ansicht durch das :



TekGPS_Oracle ds = new TekGPS_Oracle();
            
            string ergebnis = ds.SqlQuery("SELECT id FROM tabelle WHERE ROWNUM<10", "sel");

in getPoints() funktioniert das, bzw er die DB-Conn bleibt irgendwie bestehen.

Frage 3: Wo liegt genau das Problem ?
Frage 4: Ist die Vorgehensweise ansich richtig, oder soll man das komplett überarbeiten, und wenn ja wie .

Danke schon mal für eure Hilfen. Bitte keine Hinweise wie "Schau dir mal das Tutorial über oop an " Davon habe ich die letzten 3 Tage genug und will mal langsam ergebnisse haben.

Ich hoffe mal ihr könnt mir iwie Helfen.

LG