2017-04-19 94 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來解決。