我这里有这个代码:
var cmd = _ctx.Database.Connection.CreateCommand();
cmd.CommandText = "[dbo].[uspM501_Get]";
cmd.CommandType = System.Data.CommandType.StoredProcedure;
SqlParameter Param1= new SqlParameter();
Param1.ParameterName = "@Param1";
Param1.SqlDbType = SqlDbType.NVarChar;
Param1.Direction = ParameterDirection.Input;
Param1.Value = aircraft;
SqlParameter StartDate = new SqlParameter();
StartDate.ParameterName = "@StartDate";
StartDate.SqlDbType = SqlDbType.DateTime;
StartDate.Value = start_date;
SqlParameter EndDate = new SqlParameter();
EndDate.ParameterName = "@EndDate";
EndDate.SqlDbType = SqlDbType.DateTime;
EndDate.Value = end_date;
cmd.Parameters.Add(Param1);
cmd.Parameters.Add(StartDate);
cmd.Parameters.Add(EndDate);
var reader = cmd.ExecuteReader();
while(reader.Read())
{
//execute code
}
是针对此存储过程的
SELECT *
FROM table t
WHERE t.VarChar = @param1
AND t.datetime >= CASE
WHEN @StartDate IS NULL
THEN convert(datetime,'19010303',112)
ELSE @StartDate
END
AND t.datetime <= CASE
WHEN @EndDate IS NULL
THEN CONVERT(datetime,'20170303',112)
ELSE @EndDate
END
(varchar和datetime不是列名,但是这是我要检查的列的数据类型,以防有任何区别。)
当我以常规sql运行存储过程时,它返回我期望的测试用例参数的135行,其中没有任何空值。但是,当我单步执行代码并检查返回时,reader.Read()
在16次迭代后返回false,为此以及我运行的所有其他3个测试用例。我不确定这是否意味着什么,但是reader.HasRows
会返回true,从我看过的其他示例中我应该意味着reader.Read()
应该返回值?是否有我可以看到的设置或其他内容,在浏览谷歌后我找不到任何内容,但我对C#很新,所以我可能不会问正确的问题。