0
存储过程从我的C#应用程序中我使用了Dapper调用存储过程转换为varchar到日期时间:错误运行时,从代码
return conn.Query<MyList>("check_data", new { dataToCheck }, commandType: CommandType.StoredProcedure);
dataToCheck
是DataTable
因为check_data
接受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;}
}
小巧玲珑然后发送以下到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 @[email protected]
的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语句预期。当从T-SQL
运行SP
一切工作正常。
然而,从运行的代码相同,当我得到以下错误:
check_data : 241 Conversion failed when converting date and/or time from character string
为什么在T-SQL而不是从代码中调用时,它的SP的工作?日期有什么问题?
当你声明一个变量包含TYPE。我不能告诉你什么是Varchar和什么是DataTime。 – jdweng
这行'exec check_data @ dataToCheck = @ p1'看起来很可疑。具体来说,等号。 –
@DanBracuk这就是生成的东西,它在TSQL中起作用。 SP的dataToCheck参数设置为p1变量。 –