ERLEDIGT
NEIN
NEIN
ANTWORTEN
1
1
ZUGRIFFE
2041
2041
EMPFEHLEN
-
Hallo Leute
folgende Stored Procedure habe ich in MS SQL Server 2005 erstellt:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
USE [BUILD_SKILL] GO /****** Objekt: StoredProcedure [dbo].[stp_CommitPasswort] Skriptdatum: 07/28/2009 14:08:52 ******/ ALTER PROCEDURE [dbo].[stp_CommitPasswort] -- Parameter deklarieren @vorname_Nachname NVARCHAR(100), @pw NVARCHAR(MAX) OUTPUT AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; -- Insert statements for procedure here SELECT @pw = Passwort FROM dbo.Person WHERE Vorname_Nachname = @vorname_Nachname END
Der Aufruf der Procedure in SQL ist erfolgreich.
Leider funktioniert der Aufruf in C# nicht. Ich erhalte folgende Exception:
"String[1]: die Size-Eigenschaft hat den ungültigen Wert 0."
Folgende C#-Methode:
Code :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 27 28 29 30 31 32 33 34 35 36 37 38 39
public void CommitEncryptPasswort(string vornameName) { // Ausnahmebehandlung try { // SQLCommand erstellen und STP zuweisen SqlCommand cmdStp = new SqlCommand("stp_CommitPasswort", con); // CommandType zuweisen cmdStp.CommandType = CommandType.StoredProcedure; // SQLParameter für STP erstellen SqlParameter parVorNachname = new SqlParameter("@vorname_Nachname", vornameName); SqlParameter parOutPasswort = new SqlParameter("@pw", SqlDbType.NVarChar); // SQLDbType für INPUT-Parameter zuweisen parVorNachname.SqlDbType = SqlDbType.NVarChar; // Parameter zuweisen und INPUT und OUTPUT festlegen cmdStp.Parameters.Add(parVorNachname).Direction = ParameterDirection.Input; cmdStp.Parameters.Add(parOutPasswort).Direction = ParameterDirection.Output; // STP ausführen cmdStp.ExecuteNonQuery(); // Ermiitelten Wert zuweisen Passwort = cmdStp.Parameters["@pw"].Value.ToString(); } catch (SqlException sqlError) { // Methode "CreateSqlException()" aufrufen CreateSqlException(sqlError); } finally { // Methode "Close_Connection()" aufrufen Close_Connection(); } }
Ich hoffe, Ihr könnt mir schnell helfen. Danke.
-
10.09.09 10:13 #2
- Registriert seit
- May 2007
- Ort
- Ostmanien
- Beiträge
- 33
Hi!!
Wahrscheinlich etwas spät aber dennoch:
Du solltest bei Stored Procedures (und allgemein bei Datenbank Variablen Typen) immer eine feste Size angeben. Das heisst in deinem Fall in der Datenbank Passwort nicht NVARCHAR(MAX) sondern z.B. NVARCHAR(200) angeben.
Denn in der C# Deklaration des SQLParameters gibt es , meines Wissens , keine NVARCHAR(MAX) Zuweisung. Du könntest höchsten in C# den SqlDbType NVARCHAR der Size den Wert 4000 zuweisen-- höchster NVARCHAR - WERT.
Der Fehler resultiert bei dir also auf der nicht gesetzten Size des SqlParamteres "@pw".
Versuchs mal auf die Weise: (Ich habe das Feld: Passwort in der Tabelle: Person den NVARCHAR Wert 100 zugewiesen)
Code :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 27 28 29 30 31 32 33 34 35 36
public const string constr = @"Database=Datenbank;Server=localhost;user id=dbuser;password=dbpwd"; public void CommitEncryptPasswort(string vornameName) { try { using (SqlConnection con = new SqlConnection(constr)) { con.Open(); // SQLCommand über das Connection Object erstellen SqlCommand com = con.CreateCommand(); //SqlParameter erstellen und zuweisen SqlParameter paramVornameName = new SqlParameter("@vorname_Nachname", vornameName); SqlParameter paramPW = new SqlParameter("@pw", SqlDbType.NVarChar, [COLOR="MediumTurquoise"]100[/COLOR]); //SqlParameter zum SqlCommand hinzufügen com.Parameters.Add(paramVornameName).Direction = ParameterDirection.Input; com.Parameters.Add(paramPW).Direction = ParameterDirection.Output; //SqlCommand Eigenschaften setzen com.CommandType = CommandType.StoredProcedure; com.CommandText = "stp_CommitPasswort"; //Ausführen com.ExecuteNonQuery(); //SqlParamter abfrage MessageBox.Show(paramPW.Value.ToString()); } } catch (SqlException sqlError) { MessageBox.Show(sqlError.ToString()); } }
Tipp:
Durch die Using Directiven brauchst du dich nicht um das Schließen der Connection zu kümmern. Das erfolgt dann automatisch.
Ähnliche Themen
-
Rückgabetabellen einer Stored Procedure zusammenfassen
Von martinpriebe im Forum Relationale DatenbanksystemeAntworten: 0Letzter Beitrag: 09.07.08, 10:35 -
Fehler beim Aufruf einer Stored Procedure per VBS
Von oliander im Forum Relationale DatenbanksystemeAntworten: 1Letzter Beitrag: 23.05.08, 15:22 -
ETL - Zugriff auf remote Datenbank in einer stored procedure
Von Romanticus im Forum Relationale DatenbanksystemeAntworten: 7Letzter Beitrag: 11.12.07, 12:55 -
Wie kann in einer Stored Procedure von ein int auf date konvertiert werden?
Von Aleyna23 im Forum Relationale DatenbanksystemeAntworten: 2Letzter Beitrag: 15.01.07, 17:12 -
Wie kann ich alle Recordsets aus einer stored procedure anzeigen lassen?
Von eviLwitcH im Forum ASPAntworten: 3Letzter Beitrag: 15.06.05, 10:37





Zitieren
Login





