我正在使用Dapper从ASP.NET MVC 3(.NET 4.0)应用程序对SQL Server 2008 R2 Express实例执行以下查询。
INSERT INTO Customers (
Type, Name, Address, ContactName,
ContactNumber, ContactEmail, Supplier)
VALUES (
@Type, @Name, @Address, @ContactName,
@ContactNumber, @ContactEmail, @Supplier)
SELECT @@IDENTITY
的调用connection.Query<int>(sql, ...)
引发了无效的强制转换异常。我已经调试了它,就在Dapper调用return GetValue
的时候SqlDataReader
。
返回类型GetValue
为Object
,在调试器中检查它的显示类型是装箱的十进制数。
如果将select更改为SELECT CAST(@@IDENTITY as int)
,则GetValue的返回是装箱的int,并且不会引发异常。
Id列绝对是int类型;为什么要SELECT @@IDENTITY
返回小数?
一些其他信息:
- 该数据库是全新的。
- 客户表是我添加到其中的唯一对象。数据库中没有其他(用户)表,视图,触发器或存储过程。
- 数据库中有10行,Id为1,2,3,4,5,6,7,8,9,10(即,该列未超出int的限制)。
我的表定义是
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]