Zum Inhalt springen

Insert erfolgreich?


Nofi

Empfohlene Beiträge

Ich würde gerne prüfen ob mein Insert erfolgreich war, wie mache ich das? Gibt es da eine Methode (arbeite mit VS 2005 C# und einer Access DB).

Mein Code um den Eintrag einzufügen lautet (funktioniert auch!):

private void btn_typHinzufügen_Click(object sender, EventArgs e)

{

string typName = txt_typName.Text;

this.typesTableAdapter.Insert(typName);

}

Danke im voraus.

Link zu diesem Kommentar
Auf anderen Seiten teilen

also ich kenn mich jetzt nur mit VB .Net aus...

aber kannst du um deinen Code nicht eine Fehlerbehandlung bauen?

Bei VB geht das z.B. mit try...catch...end try. Wenn der INSERT nicht erfolgreich war müsste er ja dann in den "catch"-Zweig laufen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du koenntest doch die Daten in der Datenbank suchen lassen. Wenn sie gefunden werden, sind sie ja drin?

Das könnte ich wohl, aber das wäre doch umständlicher als einfach eine Methode zu nehmen die das macht. Ich weiß mittlerweile auch das es eine gibt, nur weiß ich nicht wie man sie einsetzt (und per Designer schon gar nicht).

Wenn du mit einer Access DB arbeitest, könntest du doch einfach mit Access darauf zugreifen um die Inhalte anzeigen zu lassen, oder sehe ich da was falsch?

Ja das geht auch, aber ich will ja eine Methode haben die mir diesen Vorgang abnimmt, ich will die Inhalte auch gar nicht anzeigen lassen, nur wissen ob halt in die DB eingetragen wurde oder nicht.

Bei VB geht das z.B. mit try...catch...end try. Wenn der INSERT nicht erfolgreich war müsste er ja dann in den "catch"-Zweig laufen.

Das könnte funktionieren. Habe in C# auch try and catch, werde das gleich Mal ausprobieren. Danke!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Kuwus Vorschlag hat geklappt! Vielen Dank nochmal. Es war so einfach, dass ich da nicht selbst drauf gekommen bin :rolleyes:.

Hier der Code für alle die daran interessiert sind:



private void btn_typHinzufügen_Click(object sender, EventArgs e)

        {

            bool iSucceeded = insert();


            if (iSucceeded == true)

                {

                    MessageBox.Show("erfolgreich");

                }

            else

                {

                    MessageBox.Show("nicht");

                }


public bool insert()


        {

            string typName = txt_typName.Text;



            try

            {

                this.typesTableAdapter.Insert(typName);

                return true;


            }

            catch

            {

                return false;

            }

        }

Link zu diesem Kommentar
Auf anderen Seiten teilen

*grübel*

also try..catch fängt lediglich programmfehler ab. wenn die db mist macht, muss das die anwendung nicht unbedingt mitkriegen. die einzigen fehler, die du damit abfängst sind, wenn die connection zur db weg ist oder die tabelle nicht mehr existiert(gut bei ner access-db ist das relativ unwahrscheinlich ;) ).

ob die daten bei der übertragung verlorengegangen sind, merkst du aber wirklich nur, wenn du nach der übertragung nachguckst ob alles da ist.

mfg

Spachten

Link zu diesem Kommentar
Auf anderen Seiten teilen

*grübel*

also try..catch fängt lediglich programmfehler ab. wenn die db mist macht, muss das die anwendung nicht unbedingt mitkriegen. die einzigen fehler, die du damit abfängst sind, wenn die connection zur db weg ist oder die tabelle nicht mehr existiert(gut bei ner access-db ist das relativ unwahrscheinlich ).

ob die daten bei der übertragung verlorengegangen sind, merkst du aber wirklich nur, wenn du nach der übertragung nachguckst ob alles da ist.

Wie kann ich denn Fehler, die die DB macht abfangen?

Bzw. was kann eine DB denn alles so falsch machen abgesehen von der connection oder einer nicht existierenden Tabelle? (Mein Programm soll später an den sql server 2005 'geknüpft' werden, mit Access übe ich nur.)

Das 'Verlorengehen' von Daten kann man also gar nicht als Fehler abfangen oder nur mit try and catch nicht?

Link zu diesem Kommentar
Auf anderen Seiten teilen

moin,

Eine Insert Anweisung wird doch normalerweise mit

ExecuteScalar oder halt zur not mir executenonquery gemacht

ExecuteScalar gibt dir die erstel zeile zurück also das insert war in ordnung

executenonquery gibt die anzahl der veränderten zeilen zurück also ebenfalls wenn > 0 dann in ordnung

vileicht hilft es weiter wenn nicht dann gib uns mal ein paar mehr infos

mfg

Link zu diesem Kommentar
Auf anderen Seiten teilen

Eine Insert Anweisung wird doch normalerweise mit

ExecuteScalar oder halt zur not mir executenonquery gemacht

ExecuteScalar gibt dir die erstel zeile zurück also das insert war in ordnung

executenonquery gibt die anzahl der veränderten zeilen zurück also ebenfalls wenn > 0 dann in ordnung

Damit arbeite ich z.B. gar nicht, ich weiß auch nicht wie man das macht. Ich habe meine ganze Anwendung mit dem DataSet Designer geschrieben. Man schreibt da halt seine Abfrage, welche in eine Methode 'gebettet' wird und führt diese anschließend aus.

Ist halt wesentlich einfacher und schneller als das alles per Hand zu machen, aber wie ich sehe hat das ganze auch Nachteile.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

(Mein Programm soll später an den sql server 2005 'geknüpft' werden, mit Access übe ich nur.)

Das ist ein falscher Ansatz.

Mach das gleich mit dem SQL Server arbeiten, weil Du damit wesentlich mehr Aufgaben der DB überlassen kannst und die Art der Programmierung sich wesentlich von der Arbeit mit Access unterscheidet, Stichworte hierfür sind: StoredProcedures, Trigger.

Alles was Du unter Access gemacht hast, lässt nur mit viel Aufwand auf den SQL Server übertragen, zudem ändert sich mit dem SQLServer das Programmierkonzept wesentlich !

Alleine durch SPs und Trigger, da wesentliche Aufgaben dem DBMS überlassen werden.

So sollte man beim SQLServer z.B. Abfragen (egal ob INSERT, UPDATE oder DELETE) auf dem Server als SP hinterlegen und mit Parametern aus der Anwendung anstossen, Rückgabewerte/Ergebnisse event. noch verarbeiten lassen und an die Anwendung zurückgeben.

Link zu diesem Kommentar
Auf anderen Seiten teilen

adodb recordset

Wieso soll er in einer neuen Technologie programmieren und alte, bald nicht mehr

unterstütze Techniken benutzen?

Zudem bietet doch grade ADO.NET hervorragende Methoden für den SQLServer.

Ich bleibe dabei, schmeiß die Acc DB weg, beschäftige Dich gleich mit dem SQLSever.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke für die Tipps, Vorschläge etc.. Ich würde auch gerne anfangen mit dem SQL Server zu arbeiten, aber im Moment soll ich trotzdem Access lernen. Mein Programm wird auch mit Access laufen, also es wird doch nicht von Access nach Sql Server gewechselt.

Na ja, und bei einer Access DB reicht dann wohl eine try&catch die nur Programmfehler abfängt, hoffe ich.

Danke!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Schon mal was von SQL- Server- Express gehört ???

Den benutze ich zum üben und Programmieren, habe ohne Problem auf SQL- Server umgesetzt

Ich benutze übrigens überhaupt kein Dataset sondern hab mir meine eigene SQL- Klasse geschrieben die sich um Aufbau/Abbau der Conection kümmert, dann den SQL- Befehl zusammenbaut und anschließen eine Hashtable zurückliefert. Ich benutze diesen Umweg weil ich die gleiche Klasse auch für MYSQL erfolgreich verwende.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich habe jetzt gespannt alle Beiträge gelesen, aber was ich mich direkt zu begin gefragt habe: Was machst du da eigentlich mit dem TableAdapter? Wieso rufst du die InsertMethode von dem auf?

Das Modell von ADO.NET 2.0 ist doch, das du die Daten im Dataset änderst (also z.B. eine neue DataRow einfügst) und dann Update auf den TableAdapter aufrufst der das Dataset mit der Datenbank synchronisiert.

Sollte dieses Update nicht klappen wird eine Exception geworfen und dein Problem ist keins mehr. Ausserdem kannst du so relativ Problemlos zwischen Access und SQL Server hin und her schalten ohne Programmcode zu ändern.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...