System.Data.SqlClient.SqlException: "Cannot insert the value NULL into colum..." (DateTime)
まだ誰も着手していません。
評価
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 初心者へのやさしさ
- 25/100
調査の方向性
connection.Insert(history) から開始し、入力として CU_UnikatHistory モデルとその Dapper.Contrib 属性を使用して、Dapper.Contrib が生成する INSERT と動作する connection.Execute SQL を比較します。示されている SQL Server テーブルに対して失敗を再現し、TI_Stamp が含まれているかを調べます。原因が確認され、焦点を絞った回帰テストまたは文書化された解決策が存在すれば完了です。
索引モデルが issue の本文から書いたものです。
説明
Hello,
not sure if this is an issue of Dapper, or Dapper.Contrib.
I tried to insert some data into an existing table via a self made REST API, but it always fails with this (partially German) exception:
Ausnahme ausgelöst: "System.Data.SqlClient.SqlException" in Dapper.dll
Eine Ausnahme vom Typ "System.Data.SqlClient.SqlException" ist in Dapper.dll aufgetreten, doch wurde diese im Benutzercode nicht verarbeitet.
Cannot insert the value NULL into column 'TI_STAMP', table '[..].CU_UNIKATHISTORY'; column does not allow nulls. INSERT fails.
The statement has been terminated.
The create statement for the table (table not invented by me):
CREATE TABLE [dbo].[CU_UNIKATHISTORY](
[UNIKATSTART] [numeric](12, 0) NOT NULL,
[UNIKATCOUNT] [numeric](12, 0) NULL,
[PRODUCT] [nvarchar](50) NULL,
[TI_STAMP] [datetime] NOT NULL,
[NOTES] [nvarchar](255) NULL,
CONSTRAINT [PK_CU_UNIKATHISTORY] PRIMARY KEY CLUSTERED
(
[TI_STAMP] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) ON [PRIMARY]
) ON [PRIMARY]
The Model:
using System;
using D=Dapper.Contrib.Extensions;
using System.ComponentModel.DataAnnotations;
namespace MesApi.Data.Model
{
[D.Table( "CU_UNIKATHISTORY" )]
public class CU_UnikatHistory
{
[Required]
public int? Unikatstart { get; set; }
public int? Unikatcount { get; set; }
[MaxLength( 50 )]
public string Product { get; set; }
[D.Key]
[Required]
public DateTime? TI_Stamp { get; set; }
[MaxLength(255)]
public string Notes { get; set; }
}
}
Also tried it with non-nullable variables - without success.
The code that fails:
public void WriteUnikatHistory( CU_UnikatHistory history )
{
using( var connection = new SqlConnection( csb.ConnectionString ) )
{
connection.Open();
connection.Insert( history ); //<--- System.Data.SqlClient.SqlException
}
}
A working oldschool solution without Dapper.Contrib:
public void WriteUnikatHistory( CU_UnikatHistory history )
{
var sql = "INSERT INTO [dbo].[CU_UNIKATHISTORY] ([UNIKATSTART],[UNIKATCOUNT],[PRODUCT],[TI_STAMP],[NOTES])"
+ " VALUES (@unikatstart, @unikatcount, @product, @ti_stamp, @notes);";
using( var connection = new SqlConnection( csb.ConnectionString ) )
{
connection.Open();
connection.Execute( sql, history );
}
}
Example data for the history-object in json format for insertion:
{
"Unikatstart": 1,
"Unikatcount": 2,
"Product": "string1",
"TI_Stamp": "2022-07-28T08:44:18.705Z",
"Notes": "string2"
}
As you might have noticed: I do supply a value for TI_Stamp.
When I debug the code, there is no null value being passed to connection.Insert():

Perhaps some conversion problems between .Net and SQL Datetime? Might it be related to #33?
Software used:
- Dapper: 2.0.123
- Dapper.Contrib: 2.0.78
- MS SQL: 14.0.3445.2
- Visual Studio 2022
- .NET Core 3.1
- Swashbuckle.AspNetCore: 6.4.0
- Swashbuckle.AspNetCore.Annotations: 6.4.0
- Swashbuckle.AspNetCore.SwaggerGen: 6.4.0
- 主要言語
- C#
- スター
- 293
- フォーク
- 108
- PR マージ指標
- 30日以内にマージされた PR はありません
環境構築
このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
DapperLib/Dapper.Contrib のほかの issue
-
難易度 1/5 1時間未満 初心者へのやさしさ 75/100
DapperLib/Dapper.Contrib#22 · コメント 2 件 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 42/100
DapperLib/Dapper.Contrib#174 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 45/100
DapperLib/Dapper.Contrib#173 ·
-
難易度 1/5 1時間未満 初心者へのやさしさ 10/100
DapperLib/Dapper.Contrib#172 · コメント 1 件 · リアクション 4 件 ·
-
難易度 3/5 1〜2日 初心者へのやさしさ 48/100
DapperLib/Dapper.Contrib#169 ·
DapperLib/Dapper.Contrib の issue をすべて見る
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
microsoft/fluentui-blazor#5364 ·
メンテナーはふだん 1 日以内に返信
-
.NET triage
難易度 2/5 1〜3時間 初心者へのやさしさ 74/100
microsoft/agent-framework#8811 ·
メンテナーはふだん 1 日以内に返信
-
.NET Docs
難易度 1/5 1時間未満 初心者へのやさしさ 82/100
getsentry/sentry-dotnet#5637 · コメント 1 件 ·
メンテナーはふだん 2 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
QuantConnect/Lean#9842 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
NethermindEth/nethermind#14012 ·
メンテナーはふだん 1 日以内に返信