Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从代码运行存储过程时,将varchar转换为datetime时出错_C#_Sql_Sql Server_Dapper - Fatal编程技术网

C# 从代码运行存储过程时,将varchar转换为datetime时出错

C# 从代码运行存储过程时,将varchar转换为datetime时出错,c#,sql,sql-server,dapper,C#,Sql,Sql Server,Dapper,在我的C#应用程序中,我正在使用Dapper调用一个存储过程: return conn.Query<MyList>("check_data", new { dataToCheck }, commandType: CommandType.StoredProcedure); Dapper然后将以下内容发送到SQL Server: declare @p1 dbo.CheckDataType insert into @p1 values('2017-04-19 00:00:00','201

在我的C#应用程序中,我正在使用Dapper调用一个存储过程:

return conn.Query<MyList>("check_data", new { dataToCheck }, commandType: CommandType.StoredProcedure);
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语句。从
T-SQL
运行
SP
时,一切正常

但是,当从相同的代码运行时,我得到以下错误:

检查数据:从字符串转换日期和/或时间时,241转换失败


为什么SP在T-SQL中工作,但在从代码调用它时不工作?日期有什么问题?

当您声明变量包含类型时,通过将表类型中的列从
varchar(20)
更改为
date

解决了该问题。我无法从你的代码中分辨什么是Varchar,什么是DataTime。这一行,
exec check\u data@dataToCheck=@p1
,看起来可疑。具体来说,等号是生成的,它在TSQL中工作。SP的dataToCheck参数设置为p1变量。表中的列是否与SQL中的TableValueType具有相同的数据类型?查看??为什么您的表是
(从\u date varchar(20)到\u date varchar(20))
而不是
(从\u date date,到\u date date)
?日期格式取决于区域性和
DATEFORMAT
选项。
DECLARE @fromDate datetime;
DECLARE @toDate datetime;

SELECT 
    @fromDate = CONVERT(datetime, from_date, 120),
    @toDate = CONVERT(datetime, to_date, 120),
FROM 
    @dataToCheck;