Ich verwende Dapper , um die folgende Abfrage für eine SQL Server 2008 R2 Express-Instanz aus einer ASP.NET MVC 3-Anwendung (.NET 4.0) auszuführen.
INSERT INTO Customers (
Type, Name, Address, ContactName,
ContactNumber, ContactEmail, Supplier)
VALUES (
@Type, @Name, @Address, @ContactName,
@ContactNumber, @ContactEmail, @Supplier)
SELECT @@IDENTITY
Der Aufruf von connection.Query<int>(sql, ...)
löst eine ungültige Besetzungsausnahme aus. Ich habe es ausgetestet und es ist an der Stelle , wo Dapper Anrufe GetValue
auf die zurück SqlDataReader
.
Der Rückgabetyp von GetValue
ist Object
, es in der Debugger-Show zu überprüfen, es ist eine Boxed Decimal.
Wenn ich die Auswahl auf SELECT CAST(@@IDENTITY as int)
ändere, ist die Rückgabe von GetValue ein Boxed Int und die Ausnahme wird nicht geworfen.
Die ID-Spalte ist definitiv vom Typ int. Warum sollte SELECT @@IDENTITY
eine Dezimalzahl zurückgegeben werden?
Einige zusätzliche Informationen:
- Die Datenbank ist brandneu.
- Die Customers-Tabelle ist das einzige Objekt, das ich hinzugefügt habe. Die Datenbank enthält keine anderen (Benutzer-) Tabellen, Ansichten, Trigger oder gespeicherten Prozeduren.
- Die Datenbank enthält 10 Zeilen, die IDs sind 1,2,3,4,5,6,7,8,9,10 (dh die Spalte überschreitet nicht die Grenzen eines Int).
Meine Tabellendefinition ist
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]