Я використовую Dapper для виконання наступного запиту щодо екземпляра SQL Server 2008 R2 Express з програми 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
Заклик до connection.Query<int>(sql, ...)
- це недійсне виняток із трансляції. Я налагодив це, і це в тому місці, коли Даппер дзвонить 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]