在我的 C# 应用程序中,我使用 Dapper 调用存储过程:
return conn.Query<MyList>("check_data", new { dataToCheck }, commandType: CommandType.StoredProcedure);
dataToCheck
是 aDataTable
因为check_data
接受 a TVP
。此表类型有 2 列(from_date varchar(20)、to_date varchar(20))并且基于以下类。
public class DataToCheckType
{
public DateTime? from_date {get; set;}
public DateTime? to_date {get; set;}
}
Dapper 然后将以下内容发送到 SQL Server:
declare @p1 dbo.CheckDataType
insert into @p1 values('2017-04-19 00:00:00','2017-04-19 00:00:00')
exec check_data @dataToCheck=@p1
SP 本身很简单。它调用一个构建 SQL 语句的函数,然后执行该语句:
DECLARE @sql nvarchar(max) = dbo.GetSql(@dataToCheck);
DECLARE @results TABLE (Id int);
INSERT INTO @results EXECUTE(@sql);
该GetSql
函数是这样开始的:
DECLARE @fromDate datetime;
DECLARE @toDate datetime;
SELECT
@fromDate = CONVERT(datetime, from_date, 120),
@toDate = CONVERT(datetime, to_date, 120),
FROM
@dataToCheck;
它继续按预期构建 SQL 语句。运行SP
from 时T-SQL
一切正常。
但是,从代码运行相同的代码时,我收到以下错误:
check_data : 241 从字符串转换日期和/或时间时转换失败
为什么 SP 可以在 T-SQL 中工作,但在从代码中调用它时却不能工作?日期有什么问题?
这个问题是由更改表类型的列解varchar(20)
到date
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句