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變量。 –