2017-04-19 98 views
0

存储过程从我的C#应用​​程序中我使用了Dapper调用存储过程转换为varchar到日期时间:错误运行时,从代码

return conn.Query<MyList>("check_data", new { dataToCheck }, commandType: CommandType.StoredProcedure); 

dataToCheckDataTable因为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的工作?日期有什么问题?

+0

当你声明一个变量包含TYPE。我不能告诉你什么是Varchar和什么是DataTime。 – jdweng

+0

这行'exec check_data @ dataToCheck = @ p1'看起来很可疑。具体来说,等号。 –

+0

@DanBracuk这就是生成的东西,它在TSQL中起作用。 SP的dataToCheck参数设置为p1变量。 –

回答

0

该问题已通过将表格类型中的列从varchar(20)更改为date来解决。