Tôi đang sử dụng Dapper để thực hiện truy vấn sau đối với phiên bản SQL Server 2008 R2 Express từ ứng dụng 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
Cuộc gọi đến connection.Query<int>(sql, ...)
đang ném Ngoại lệ không hợp lệ. Tôi đã gỡ lỗi nó và đó là lúc Dapper gọi GetValue
lại SqlDataReader
.
Kiểu trả về GetValue
là Object
, kiểm tra nó trong trình gỡ lỗi hiển thị đó là số thập phân được đóng hộp.
Nếu tôi thay đổi lựa chọn thành SELECT CAST(@@IDENTITY as int)
, sự trở lại của GetValue là một int được đóng hộp và ngoại lệ không bị ném.
Cột Id chắc chắn là kiểu int; Tại sao sẽ SELECT @@IDENTITY
trả lại một số thập phân?
Một số thông tin bổ sung:
- Cơ sở dữ liệu là thương hiệu mới.
- Bảng Khách hàng là đối tượng duy nhất tôi đã thêm vào nó. Không có bảng (người dùng), khung nhìn, trình kích hoạt hoặc thủ tục được lưu trữ nào trong cơ sở dữ liệu.
- Có 10 hàng trong cơ sở dữ liệu, có Id là 1,2,3,4,5,6,7,8,9,10 (tức là cột không vượt quá giới hạn của một int).
Định nghĩa bảng của tôi là
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]