Quel type de données la méthode SQLCommand ExecuteScalar () renvoie-t-elle?

Dans SQL Server, ID est un entier non nul et une identité.

Lorsque je cours le code suivant, j'obtiens une exception InvalidCastException sur la dernière ligne:

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(); 

Qu'est-ce que ExecuteScalar () qui returnne ici? Quel que soit son return a un ToSsortingng () qui le fait ressembler à un nombre, donc cette ligne de code terrible fonctionne:

 int id = Int32.Parse(cmd.ExecuteScalar().ToSsortingng()); 

SCOPE_IDENTITY() renvoie une decimal dans le code, également appelée NUMERIC(38,0) dans TSQL.

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

Donc, si vous voulez une dissortingbution directe, vous pouvez faire (int)(decimal)cmd.ExecuteScalar(); . Notez qu'une conversion décimale en int peut perdre des informations dans le sens le plus ssortingct, alors soyez averti. Mais avec votre colonne d'identité étant un integer, la conversion sera sûre.

Il renvoie probablement une instance encadrée d'un type numérique différent, tel que long .
Une boîte long ne peut pas être convertie en int .

Vous pouvez appeler GetType() sur la valeur de return pour voir de quel type il s'agit réellement.

À la fin de votre déclaration INSERT

 SELECT SCOPE_IDENTITY() 

Il renvoie la valeur d'identité de la ligne insérée dans la table [Users].