PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mssql Tutorials gesucht.



YannicK
06.07.2009, 08:32
Guten tag Freehack'ler

Ich suche ein Online-Tutorial indem die funktionsweise der Syntax und alles was dazugehört erklärt wird.

Um genauer zu sein suche ich Tutorials indem erklärt wird wie genau Stored Proceduren funktionieren.

Ich habe ein C++ programm ( nicht den quellcode ) das mit Mssql arbeitet.
Dieses Programm gibt Parameter an eine Procedure die dan verarbeitet werden.

Ich versteh leider noch nicht wie z.b das ergebnis eines
"SELECT column1, column2 FROM tabelle" an das Programm zurückgegeben wird.

Es wäre sehr nett wen sie mir helfen würden.

Mfg Yannick

G36KV
06.07.2009, 10:35
Du verbindest dich mit einem Admin Account auf den MSSQL Server und dann kannst du die stored procedures direkt ansprechen

Den Syntax der einzelnen Funktionen findest du via google, z.b. http://www.mssqlcity.com/FAQ/Devel/xp_regread.htm

Das schickst du einfach an den server:
EXEC stored_procedure Argumente
und der server antwortet dir dann mit einem rückgabewert... ganz einfach also.

In deiner Signatur steht du kannst sql? Du wirst ja wohl wissen das man mit select dbs abfragen kann... das hat aber nichts mit stored procedures zu tun.

Ich kenne nur einen tutorial für ADO (.NET oder VB6). Mit ADO ist es sehr einfach das alles zu machen...

YannicK
06.07.2009, 12:23
In Myssql zusammen mit php ist das ja sehr einfach den rückgabewert zu erhalten

$row = mysql_fetch_assoc(mysql_query(SELECT * FROM tabelle));

Nur ich versteh nicht wie dies in MSSQL abläuft.

Zum glück schreibt das Programm einen Query log wen etwas fehlgeschlagen ist.
Zum beispiel:
query:PROCEDURENAME 'parameter1','parameter2'

Soweit ich weis ruft er die Procedure "PROCEDURNAME" auf und übergibt an die Procedure die parameter parameter1 und parameter2.

Nun weis ich jetzt nicht genauer weiter wie ich diese parameter in eine variable schreibe.

Würde das stimmen?

@variable varchar(60), @variable2 varchar(60)

ich würde jetzt davon ausgehen das parameter1 in @variable steht und parameter2 in @variable2 steht.

Nun kann ich damit ja weiter arbeiten z.b
SELECT column1, column2, column3 FROM tabelle WHERE column1 = @variable1 AND column2 = @variable2

Die abfrage sucht ja jetzt nach den passenden daten und selectiert column1, column2 und column3.

Nur wie gebe ich diese jetzt an das Programm zurück? wie genau nimmt das programm die rückgabe werte an?
muss ich das ergebnis vom Select in eine variable schreibe die dan das programm annimmt z.b SET @rückgabe = column1

Ich bin überfordert =(

G36KV
06.07.2009, 13:13
Was möchtest du überhaupt bezwecken? Willst du dir dein eigenes tool coden? welche Programmiersprache genau?

Oder willst du t-sql programmieren?
http://www.tsql.de/transact-sql/variablen/transact-sql-variablen.php

YannicK
06.07.2009, 13:57
Nein wie gesagt habe ich die Serverdaten eines MMOPRG da diese files auf einem ungesicherten FTP gelagert wurden.

Nur leider war keine Datenbank dabei und diese möchte ich jetzt Selbst nachbauen.
Die Server dateien sind in C++ geschrieben.
Nur leider weis ich überhaupt nicht wie C++ mit den Storec Proceduren von Mssql kommuniziert btw. wie ich ergebnise an das C++ programm zurück gebe

Ein beispiel ist der login

Wen man sich einloggt übergibt er zwei parameter an die procedur XYZ wie die aber heisen weis ich nicht. aufjedenfall ist es der login name und das Passwort

Er wird höchstwarhscheinlich in der Tabelle nach den userdaten suchen ob loginname und passwort übereinstimmen und diese gibt er dan glaub ich irgendwie zurück.

G36KV
07.07.2009, 16:08
Ich versteh dich zwar immer noch nicht richtig, aber ich glaube du hast hier eher ein Reverse Engineering Problem.

Du hast Server Dateien von einem Spiel die eine MSSQL Server Datenbank benutzen und weisst nicht auf welche Datenbank Tabelle sie zugreifen? Also wie die Tabellen heissen müssen?
-> Du kannst dir die Spiele Dateien in einem Debugger anschauen und die Daten "rausfischen".


Wen man sich einloggt übergibt er zwei parameter an die procedur XYZ wie die aber heisen weis ich nicht. aufjedenfall ist es der login name und das Passwort

Er wird höchstwarhscheinlich in der Tabelle nach den userdaten suchen ob loginname und passwort übereinstimmen und diese gibt er dan glaub ich irgendwie zurück.Also entweder du erklärst es hier mega schlecht oder du hast 0 Ahnung von allem.

Die (in diesem Fall) Clients (deine gefundenen Dateien?) greifen auf den MSSQL Server zu? Beim Login wäre das doch eine ganz normale SELECT Abfrage (Wenn in der Serverdatenbank die Userdaten stehen).
Also das Spiel fragt nach Userdaten... dann eine SELECT Abfrage an den MSSQL Server, wenn gefunden login erfolgreich?

YannicK
07.07.2009, 17:13
Du verstehst mich wohl etwas falsch.

Wen ich mich zum Beispiel mit dem Username und Passwort einloggen will sende ich diese daten ja an den Server.

Dieser ruft die Procedure (z.b) login auf.
login 'username', 'password'

Diese nehme ich ja in der Procedure mit dem code auf:


ALTER PROCEDURE [dbo].[login]
@username varchar(62),
@password varchar(32)
AS
....

Richtig soweit?

Wie ich dan mti select und so weiter arbeite weis ich
SELECT bla,bla1,bla2 FROM account WHERE username = @username;

Nur wie gebe ich dem Programm das Resultat zurück?
Also hier zwei beispiele zu meiner frage:
Er Ruft die Procedure auf um Account informationen zu laden select ...
Wie gebe die Account informationen wieder zurück an das Programm damit er damit arbeiten kann?

Beim login ist glaub ich Existieren die Account daten oder nicht?
Also eine Procedure die ein Select macht und dan negativ/positiv zurückgibt

Wie mache ich das?

G36KV
07.07.2009, 19:20
Dieser ruft die Procedure (z.b) login auf.
Muss er nicht, er kann auch direkt eine SELECT Abfrage senden und das Ergebnis selber auswerten. Je nachdem wie das c++ programm programmiert ist.


Also willst du doch was in TSQL machen?
google einfach nach tsql tutorial


CREATE PROCEDURE login(@username varchar(255), @pw varchar(255)) AS
DECLARE @result int

IF blabla SET @result = 1

return @result
so viel ich noch weiss gibts in mssql kein boolean... Musst halt wissen welcher rückgabewert dein programm haben möchte (debugger)

YannicK
08.07.2009, 17:30
Ich bedanke mich schonmal vielmals :)

Ich werde mir jetzt ein paar Tut's durchlesen über TSQL

Nur bleibt da noch eine frage und zwar:

Wie wird das RETURN übergeben?
Muss ich das in eine Bestimmte variable packen (die die exe annimmt)
oder muss ich sie in einer reihen folge ausgeben?

also z.b:
RETURN meinname,meinpasswort,session
oder
RETURN meinname_variable,meine_session_variable,meinpassw ord_variable

G36KV
08.07.2009, 18:11
Um es noch mal klar zu stellen: Stored procedures wurden eigentlich erfunden um kompliziertes Zeug zu "kapseln" um es immer wieder aufzurufen. Dein Beispiel: login, ist kein komplizierter Sachverhalt. Das C++ Programm wäre besser dran wenn es einfach eine SELECT Abfrage sendet, anstatt dafür eine stored procedure verwendet.

Aber falls dein C++ wirklich eine stored procedure verwendet sollte es so ablaufen:
Verbinden auf den MSSQL Server, Befehl "EXEC LOGIN username passwort" schicken und auf Antwort warten. LOGIN wäre in diesem Fall die stored procedure die irgendein Rückgabewert liefert mit "RETURN Variable12".
Der Server schickt dann den Rückgabewert der procedure an das C++ Programm. In dem C++ programm muss jetzt festgelegt sein, welcher Rückgabewert "login erfolgreich" oder "login fehlgeschlagen" bedeutet. Das C++ Programm erhält also nur als Serverantwort den Wert, der in der Variable12 steht, sonst nichts.

Ohne Stored procedure würde es so ablaufen:
Verbinden auf den MSSQL Server, Befehl "SELECT username, passwort FROM Login WHERE ......" schicken und auf Antwort warten. Die Antwort des Servers ist eben das Ergebnis der Select Abfrage...

Was das C++ Programm als Antwort bzw. Rückgabewert haben will und was es an den MSSQL Server überhaupt schickt musst du WISSEN!
Vielleicht will das C++ Programm bei erfolgreichem Login als Rückgabewert den Textstring "Käsekuchen"?
Ich hoffe ich habe dir dein Problem jetzt gut dargestellt.

YannicK
08.07.2009, 18:50
00401F96 |. 50 PUSH EAX ; /<%s>
00401F97 |. 8B4424 08 MOV EAX,DWORD PTR SS:[ESP+8] ; |
00401F9B |. 51 PUSH ECX ; |<%s>
00401F9C |. 52 PUSH EDX ; |<%s>
00401F9D |. 68 BC914400 PUSH 2__Certi.004491BC ; |Format = "LOGIN_STR @iaccount='%s', @ipassword='%s', @isession='%s'"
00401FA2 |. 50 PUSH EAX ; |s
00401FA3 FF15 EC054400 CALL DWORD PTR DS:[<&USER32.wsprintfA>] ; USER32.wsprintfA
00401FA9 |. 83C4 14 ADD ESP,14
00401FAC |. C2 1000 RETN 10
00401FAF |> 8B4C24 0C MOV ECX,DWORD PTR SS:[ESP+C]
00401FB3 |. 8B5424 08 MOV EDX,DWORD PTR SS:[ESP+8]
00401FB7 |. 8B4424 04 MOV EAX,DWORD PTR SS:[ESP+4]
00401FBB 51 PUSH ECX ; |<%s>
00401FBC |. 52 PUSH EDX ; |<%s>
00401FBD |. 68 A4914400 PUSH 2__Certi.004491A4 ; |Format = "LOGIN_STR '%s', '%s'"
00401FC2 |. 50 PUSH EAX ; |s
00401FC3 |. FF15 EC054400 CALL DWORD PTR DS:[<&USER32.wsprintfA>] ; \wsprintfADas ist der code glaube ich mal ._.

Format = "LOGIN_STR '%s', '%s'

Ruft meines wissens ja die SP login_str mit zwei strings auf (username,password)

Doch was es mit
LOGIN_STR @iaccount='%s', @ipassword='%s', @isession='%s'

Aufsich hat weis ich nicht aber es wäre ja unsinnig wen das die RESULT's wären die er annimmt o,O wofür braucht er da das pw? :s

G36KV
08.07.2009, 19:14
Format = "LOGIN_STR '%s', '%s'

Ruft meines wissens ja die SP login_str mit zwei strings auf (username,password)

Doch was es mit
LOGIN_STR @iaccount='%s', @ipassword='%s', @isession='%s'

Aufsich hat weis ich nicht aber es wäre ja unsinnig wen das die RESULT's wären die er annimmt o,O wofür braucht er da das pw? :s
Jo das sieht sehr vielversprechend aus, wenn du aber genau schaust, siehst du das ein RETN dazwischen ist. D.h. zunächst mal ohne zu wissen was weiter oben steht wird nur eins davon benutzt...

Also ich tippe mal, dass die LOGIN_STR procedure 2 funktionen erfüllt. Einmal normaler login mit LOGIN_STR username passwort und das andere könnte vielleicht ein logout sein oder eine Abfrage für sonstiges? Muss man genauer anschauen.
@iaccount='string' ist eine normale variablen Zuweisung in TSQL.

YannicK
08.07.2009, 19:59
Nur woher weis ich was ich jetzt als RESULT angeben muss? ;<

Wen ich nur RESULT 1; z.b mache kommt SERVER VERIFIZIERUNGSFEHLER

Wen ich aber ein SELECT 1; RETURN 1; hinmache kommt Falscher username.

Wie könnte ich das aber herausfinden? mit wpe hab ich schon geschaut was der so sendet.

er sendet die procedure und die parameter und erhält dan eine antwort von port 1433 (mssql)

G36KV
08.07.2009, 22:58
Nur woher weis ich was ich jetzt als RESULT angeben muss? ;<

Mit dem Debugger kann man das doch schön sehen... setzt halt ein breakpoint in diese prozedure und steppe durch bis du zu der stelle kommst, wo das programm den rückgabewert empfängt und mit etwas vergleicht...