J'utilise Dapper pour exécuter la requête suivante sur une instance SQL Server 2008 R2 Express à partir d'une application ASP.NET MVC 3 (.NET 4.0).
INSERT INTO Customers (
Type, Name, Address, ContactName,
ContactNumber, ContactEmail, Supplier)
VALUES (
@Type, @Name, @Address, @ContactName,
@ContactNumber, @ContactEmail, @Supplier)
SELECT @@IDENTITY
L'appel à connection.Query<int>(sql, ...)lève une exception de distribution non valide. Je l'ai débogué et c'est au point où Dapper appelle GetValueles retournés SqlDataReader.
Le type de retour de GetValueest Object, l'inspectant dans le programme de débogage, c'est une décimale encadrée.
Si je change la sélection en SELECT CAST(@@IDENTITY as int), le retour de GetValue est un entier encadré et l'exception n'est pas levée.
La colonne Id est définitivement de type int; Pourquoi SELECT @@IDENTITYretournerait une décimale?
Quelques informations supplémentaires:
- La base de données est toute neuve.
- La table Customers est le seul objet que je lui ai ajouté. Il n'y a aucune autre table (utilisateur), vue, déclencheur ou procédure stockée dans la base de données.
- Il y a 10 lignes dans la base de données, les ID sont 1,2,3,4,5,6,7,8,9,10 (c'est-à-dire que la colonne n'est pas au-delà des limites d'un int).
Ma définition de table est
CREATE TABLE [dbo].[Customers](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Type] [int] NOT NULL,
[Name] [nvarchar](255) NOT NULL,
[Address] [nvarchar](1000) NOT NULL,
[ContactName] [nvarchar](255) NOT NULL,
[ContactNumber] [nvarchar](50) NOT NULL,
[ContactEmail] [nvarchar](255) NOT NULL,
[Supplier] [nvarchar](255) NOT NULL,
CONSTRAINT [PK_Customers] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (
PAD_INDEX = OFF,
STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]