ฉันใช้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, ...)
ส่งการยกเว้น Cast ไม่ถูกต้อง ผมเคยบั๊กมันและมันก็เป็นจุดที่ Dapper เรียกบนกลับGetValue
SqlDataReader
ชนิดส่งคืนของGetValue
คือObject
การตรวจสอบในรายการดีบักเกอร์ซึ่งเป็นทศนิยมแบบกล่อง
ถ้าฉันเปลี่ยนการเลือกSELECT CAST(@@IDENTITY as int)
เป็นการคืนค่าของ GetValue จะเป็น int แบบกล่องและข้อยกเว้นจะไม่ถูกส่งออกไป
คอลัมน์รหัสเป็นประเภท int แน่นอน ทำไมจะSELECT @@IDENTITY
ส่งกลับทศนิยม
ข้อมูลเพิ่มเติมบางส่วน:
- ฐานข้อมูลเป็นของใหม่
- ตารางลูกค้าเป็นวัตถุเดียวที่ฉันเพิ่มเข้าไป ไม่มีตาราง (ผู้ใช้) อื่น ๆ มุมมองทริกเกอร์หรือกระบวนงานที่เก็บไว้ในฐานข้อมูล
- มี 10 แถวในฐานข้อมูลมีรหัสของ 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]