【发布时间】:2018-10-22 22:47:18
【问题描述】:
不是User-Defined Table Type insertion sometimes causing conversion error的重复项
我有一个用户定义的表类型:
CREATE TYPE [dbo].[udtImport] AS TABLE(
Name varchar(256) null
Code varchar(32) null
StartDate varchar(256) null
EndDate varchar(256) null
DateCreated datetime null
使用DateTime.Now(), 在我的数据库层中填充 DateCreated 字段,而所有其他字段都来自导入的表。
当我导入一个填充了日期字段的文件时,我得到一个 SQL 错误:
从字符转换日期和/或时间时转换失败 字符串。
使用 SQL Profiler 截取生成的代码显示:
DECLARE @p1 dbo.udtImport;
INSERT INTO @p1
VALUES
( N'Kit A1',
N'A002',
'2016-04-02 00:00:00.000',
'2016-10-10 00:01:00.000',
'2018-10-22 16:08:28.6823468' );
exec impSaveImport @ImportList=@p1
impSaveImport 是一个存储过程,它只有一个参数:表类型 var 并直接插入表 [Import]。没有逻辑,没有触发器,没有对其他表的引用。
在 SSMS 中执行此代码显示与预期相同的错误。
修剪最后一个 DateTime 字段的最后 4 位数字会导致插入查询成功。
到目前为止一切顺利。
当我导入 StartDate 和 EndDate 字段为空的文件时,我没有收到任何错误,并且数据已成功插入到 Import 表中。
当我使用探查器拦截成功插入时,我得到:
DECLARE @p1 dbo.udtImport;
INSERT INTO @p1
VALUES
( N'Kit A1',
N'A002',
null,
null,
'2018-10-22 16:34:11.5243245' );
exec impSaveImport @ImportList=@p1
请记住,此查询成功地将一行插入到表 Import 中。
当我在 SSMS 中运行此最新查询时,我得到与以前相同的转换错误,
但它在我的 MVC 应用程序中运行没有错误!
这最后一部分让我很难过。
怎么可能?
项目正在使用带有 SQL2016 的 MVC。
【问题讨论】:
-
您必须向我们展示您的 MVC 应用程序的代码。也许您的应用程序捕获了错误或为您的数据库设置了不同的日期格式。
-
@Corion。异常处理程序仅在填充 StartDate 和 EndDate 字段时捕获描述的 SQL 错误。应用程序使用视图模型来建模此数据,日期字段定义为可为空的 DateTime。没有其他逻辑。
标签: sql asp.net-mvc sql-trace