2010-10-18 9 views
5

In SQL Server ist ID eine Nicht-Null-Ganzzahl und eine Identität.Welchen Datentyp gibt die SQLCommand-Methode ExecuteScalar() zurück?

Wenn ich den folgenden Code ausführen, erhalte ich eine InvalidCastException in der letzten Zeile:

SqlCommand cmd = new SqlCommand(); 
cmd.Connection = _conn; 
cmd.CommandText = @"INSERT INTO [Users] (Name, Email, Password) VALUES (@name, @email, @pass); SELECT SCOPE_IDENTITY()"; 
cmd.Parameters.AddWithValue("@name", newUser.Name); 
cmd.Parameters.AddWithValue("@email", newUser.Email); 
cmd.Parameters.AddWithValue("@pass", newUser.PasswordHash); 
int id = (int)cmd.ExecuteScalar(); 

Was ist ExecuteScalar() Rückkehr hier? Was auch immer seine Rückkehr hat eine ToString(), die es wie eine Reihe aussehen läßt, so dass diese schreckliche Codezeile funktioniert:

int id = Int32.Parse(cmd.ExecuteScalar().ToString()); 
+7

Was passiert, wenn Sie 'GetType()' aufrufen? – SLaks

+0

Wow, warum habe ich nicht daran gedacht? Es gibt eine Dezimalzahl zurück. Vielen Dank. – Patty

Antwort

2

Es ist wahrscheinlich eine Box-Instanz von einem anderen numerischen Typ, wie long zurück.
A boxed long cannot be converted to int.

Sie können GetType() auf den Rückgabewert aufrufen, um zu sehen, welcher Typ es wirklich ist.

+1

Um diese Antwort zu erweitern, ist der ExecuteScalar-Rückgabetyp Object, was bedeutet, dass jeder Werttyp eingerahmt wurde. Sie können einen Boxed-Werttyp nicht in einen anderen als den Originaltyp umwandeln –

0

Von Ende Ihrer Anweisung INSERT

SELECT SCOPE_IDENTITY() 

Es ist die Identität Wert des in den [Benutzer] Tabelle eingefügt Zeile zurückgibt.

9

SCOPE_IDENTITY() gibt eine decimal in Code zurück, sonst bekannt als NUMERIC(38,0) in TSQL.

http://msdn.microsoft.com/en-us/library/ms190315.aspx

Wenn Sie also eine direkte Besetzung möchten, können Sie (int)(decimal)cmd.ExecuteScalar(); tun. Beachten Sie, dass eine Dezimal-zu-Int-Konvertierung Informationen im engeren Sinne verlieren kann. Da Ihre Identitätsspalte eine Ganzzahl ist, ist die Konvertierung sicher.

Verwandte Themen