Frage

In den letzten Tagen habe ich versucht, eine gespeicherte Prozedur in MySQL zu schreiben, und ich habe etwas Trulble zum Laufen. Hoffe, jemand hier kann mir ein paar Eingaben geben :)

Das Beispiel, das ich poste, ist, damit ASP.NET -Mitgliedschaftsanbieter einen neuen Benutzer erstellt. Ich gehe davon aus, dass ich E -Mail und Passwort an die DB senden werde und eine INT -Rückgabe abruft, um zu überprüfen, ob die Benutzerdeatils in die DB geschrieben wurden.

Ich verwende einen MySQL DB 5.1 (glaube ich) und schreibe den SQL an ein WebInterface.

Ich habe 2 Nebenquestionen, kann das auch jemand erklären :): 1) Ich benutze einen Trennzeichen, weiß aber nicht, was es tut. 2) Ich bin mir nicht sicher, ob ich andere Dinge tun muss, um autocommit = 0 zu setzen, um Transaktionen zu funktionieren, oder ob ich das überhaupt tun muss.

Ich weiß, dass ich eine Anweisung anstelle einer Transaktion hätte verwenden können, möchte aber es mit einem tun, um herauszufinden, wie es funktioniert. (Ich erwarte, es später viel zu verwenden)

Der Code kann ich nicht zur Arbeit bekommen:

DELIMITER //

CREATE DEFINER=`websharp_dk`@`%` PROCEDURE `CreateUser`(
    IN _username VARCHAR(100),
    IN _Password VARCHAR(100))
    RETURNS INT

    BEGIN
    SET autocommit = 0;
    DECLARE return_value INT;

    BEGIN TRY
        START TRANSACTION
                INSERT INTO User 
                (Email
                ,Password
                ,Failed_Password_Count
                ,Creation_Date)
                VALUES
                (_username
                ,_Password
                ,0
                ,Datetime.Now())
            SET return_value = 1;
        COMMIT;
    END TRY

    BEGIN CATCH
        ROLLBACK
        SET return_value = 0;
    END CATCH

    BEGIN FINALLY
    RETURN return_value;
    END FINALLY 
    END//
DELIMITER ;

Bearbeiten: Die Fehlermeldung, die ich bekomme, lautet:

1064 - Sie haben einen Fehler in Ihrer SQL -Syntax; Überprüfen Sie das Handbuch, das Ihrer MySQL -Serverversion entspricht, damit die richtige Syntax in der Nähe von 'Int begin setze autocommit = 0; Return_value int; 'in Zeile 4

Keine korrekte Lösung

Andere Tipps

Um Transaktionen zu unterstützen, stellen Sie sicher, dass Sie die InnoDB Storage Engine und nicht das Standard -MyISAM verwenden.

Was diesen Code selbst angeht, wäre meine erste Frage: Warum wickeln Sie diese einzelne Abfrage in eine Transaktion ein? Welche Fehler sehen Sie?

Der Trennzeichen definiert neu, welche Abfolge von Zeichen Sie verwenden, um eine SQL -Anweisung zu beenden. Das gesamte Erstellungsverfahren ist eine große Aussage, und Sie müssen MySQL mitteilen, wo es mit etwas endet (normalerweise wäre es ';'). Da Sie jedoch eine Reihe anderer Aussagen im "Körper" (zwischen Beginn und Ende) der Erstellung von Verfahrensanweisungen haben, müssen Sie auch alle beendet werden Erste ';'.

Ohne den Trennzeichen neu zu definieren, würde MySQL denken, dass die Erstellung von Verfahren wie diese so aussah und dann eine neue Aussage starten:

CREATE DEFINER=`websharp_dk`@`%` PROCEDURE `CreateUser`(
    IN _username VARCHAR(100),
    IN _Password VARCHAR(100))
    RETURNS INT

    BEGIN
    SET autocommit = 0;

Verwenden von Trennzeichen; Am Ende des Skripts ändert sich der Trennzeichen zurück zu ''; und wird nicht benötigt, obwohl es eine gute Praxis ist, dies zu tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top