Autor Beitrag
DennisXX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 133



BeitragVerfasst: Mo 15.08.11 08:47 
Hallo !

Weiß vielleicht jemand von euch, wie ich TSQL Code (also Code, der datenbankseitig ausgeführt werden soll) in einer C# Methode einbauen kann, die sich ja quasi in der Benutzeroberfläche befindet?

Viele Grüße
Dennis
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4799
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mo 15.08.11 10:22 
Hallo Dennis,

könntest du deine Frage noch etwas genauer ausführen (vllt. mit Beispiel)?
Du weißt doch wie man mittels ADO.NET auf die Datenbank zugreift.

Oder möchtest du komplette TSQL-Skripte von C# aus aufrufen? Dann sollte smehrozalam.wordpres...-with-go-statements/ deine Wünsche erfüllen (Stichworte: "GO" bzw. ServerConnection).
DennisXX Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 133



BeitragVerfasst: Mo 15.08.11 10:32 
Hallo !

Ich könnte Dir ein Beispiel in einer Art Pseudocode mal zeigen. Diese Vorhaben ungefähr plane ich umzusetzen:

ausblenden 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:
//Die Funktion wird in GUI der Anwendung gestartet, wenn ein Button gedrückt wurde
FunktionNachButton(){

      MessageBox.Show("SQl Anweisung ausführen?");
      //Ja - Nein Schaltflächen werden angezeigt

      If (Ja gedrückt){

             Begin Transaction;

             //Insert SQL Statement wird in Datenbank abgesetzt

             MessageBox.Show("Transaktion jetzt festschreiben?");
             //Ja - Nein Schaltflächen werden angezeigt

 
             If (Ja gedrückt)

                     Commit Transaction;

             Else

                     Rollback Transaction
                     MessageBox.Show("Transaktion wird zurückgesetzt");

}


Ich plane dieses, damit man als Benutezr etwas über die Transaktionen die Kontrolle behält und das bequem über eine GUI steuern kann. Aber im Prinzip ist es sachon so, wie Du vermutet hast, ich möchte einfach TSQL Skripte aus C# heraus aufrufen?

Grüße
Dennis
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mo 15.08.11 10:52 
Das angesprochene ADO.Net macht genau das.

Eine Benutzerinteraktion in einer Transaktion ist aber ein ganz schlechte Idee. Das solltest du unabhängig von der Umsetzung in C# mit ADO.NET nochmal durchdenken.
DennisXX Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 133



BeitragVerfasst: Mo 15.08.11 11:23 
Hallo Ralf !

Was wäre denn dazu eine bessere Alternative? Ich möchte mit meinem Vorhaben einfach nur gewährleisten, dass die Benutzer sehr flexibel über das Klicken in einer GUI die Transaktionen steuern können und dazu quasi kein SQL können müssen.

Grüße
Dennis
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mo 15.08.11 11:46 
Zitat:
Was wäre denn dazu eine bessere Alternative?


Kommt natürlich aufs konkrete Problem an. Bezogen auf deinen Pseudocode gibt es in diesem Fall keinen Grund nicht schon vor dem Start der Transaktion User alles mit dem User durchzukaspern. In den meistens Fälle wüsste ich eh nicht was ein User während einer Transaktion noch steuern sollte. Also meisten wird es darauf hinauslaufen erst alle zu klären ('du lieber User, möchtest du die Daten speichern?') dann die Transaktion zu starten gefolgt vom SQL statements auführen und diese dann gegebenenfalls zu commiten oder zu rollbacken. Je nach Fehler kann man nach einem nötigen Rollback ein Retry anbieten. Es gibt aber keinen Grund das in der ursprünglichen Transaktion zu machen.
DennisXX Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 133



BeitragVerfasst: Mo 15.08.11 12:04 
Hallo !

Kann mir vielelicht jemand von euch mal die Funktion und den Sinn der Methode .Add() hier in diesem Kontext erklären?

command.Parameters.Add("@ID", SqlDbType.Int);

Grüße
Dennis
dark-destination1988
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 178
Erhaltene Danke: 21



BeitragVerfasst: Mo 15.08.11 12:13 
du fügst dem command einen Parameter hinzu
zum beispiel bei "insert into test (id) values (:ID)"

-->:ID ist hierbei der Platzhalter im CommandText
mit deinem cmd "registrierst" du den ID paramater
der eigentliche wert wird mit:
ausblenden C#-Quelltext
1:
command.Parameters["ID"].Value=10					

übergeben