C#SqlDataReader只返回16行?

时间:2017-08-15 20:15:41

标签: c# sql-server sql-server-2008

我这里有这个代码:

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#很新,所以我可能不会问正确的问题。

0 个答案:

没有答案