Saya menggunakan Dapper untuk menjalankan kueri berikut terhadap contoh SQL Server 2008 R2 Express dari aplikasi 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
Panggilan untuk connection.Query<int>(sql, ...)melempar Pengecualian Pemain Tidak Valid. Saya sudah men-debug dan itu pada titik di mana Dapper memanggil GetValueyang dikembalikan SqlDataReader.
Jenis kembalinya GetValueadalah Object, memeriksanya di acara debugger itu adalah desimal kotak.
Jika saya mengubah pilih ke SELECT CAST(@@IDENTITY as int), kembalinya GetValue adalah kotak int dan pengecualian tidak dibuang.
Kolom Id jelas bertipe int; Mengapa SELECT @@IDENTITYmengembalikan desimal?
Beberapa informasi tambahan:
- Basis datanya baru.
- Tabel Pelanggan adalah satu-satunya objek yang saya tambahkan ke dalamnya. Tidak ada tabel (pengguna) lain, pandangan, pemicu atau prosedur tersimpan dalam database.
- Ada 10 baris dalam database, ada Id 1,2,3,4,5,6,7,8,9,10 (yaitu kolom tidak di luar batas int).
Definisi tabel saya adalah
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]