2013-10-17 42 views
0

如果我有一個對象,如:與精緻小巧與DATETIME2插入數據引發SQLDATETIME溢出異常

​​

如果我把我的對象的姓名和出生日期是DateTime.MinValue和使用小巧玲瓏,像這樣:

INSERT INTO [Person] ([Person].[Name], [Person].[DOB]) VALUES (@Name, @DOB); 
SELECT CAST(SCOPE_IDENTITY() AS BIGINT) AS [Id] 

connection.Query<long>(sql, entity); 

這將引發SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.

但是,如果我在執行SQL Management Studio中使用SQL字符串版本「0001-01-01 00:00:00」其插入到數據庫鰭即

任何想法如何讓這個工作?

感謝

UPDATE:

CREATE TABLE [dbo].[Person](
    [Id] [int] IDENTITY(1,1) NOT NULL, 
    [DOB] [datetime2](7) NULL, 
    [Name] [nvarchar](20) NOT NULL, 
CONSTRAINT [PK_Referrer_Referee] 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] 
GO 
+0

請將人員表編寫爲創建表並將其張貼在此處。 – empi

+0

可能是某種錯字,但字段數不匹配插入查詢中的值count – Steve

+0

這是一個拼寫錯誤,謝謝 – Jon

回答

0

淨日期時間應同時處理。

Dapper將datetime映射到DbType DateTime,而不是DbType.DateTime2,這正是您所需要的。

https://github.com/SamSaffron/dapper-dot-net/blob/master/Dapper%20NET40/SqlMapper.cs#L384

類型映射[typeof運算(日期時間)] = DbType.DateTime; typeMap [typeof(DateTime?)] = DbType.DateTime;

但是你可以自己添加一個TypeMap,但是你需要創建一個datetime2類型/類。

+0

也行號現在是錯誤的,你可以鏈接到功能或測試呢? (我不知道你是否可以) –

0

問題是INSERT語句中。您已指定三個值和兩個列名稱。像這樣的查詢可以工作,或添加對應於變量@RefereeId的列名稱。

INSERT INTO [Person] ([Person].[Name], [Person].[DOB]) VALUES (@Name, @DOB); 
+0

這是一個錯字,抱歉 – Jon

1

試着看一下this SO回答,關於小巧玲瓏

映射DATETIME2類型
+0

確實看到,但我已經安裝了nuget,所以沒有文件修改。謝謝:) – Jon