Sql Query with Dapper возвращает пустой результат, но результат запроса от профилировщика не пустой - PullRequest
1 голос
/ 01 апреля 2019

У меня SQL-запрос сделан с помощью dapper, и он возвращает пустой результат.Но если я запускаю SQL Profiler и выполняю запрос, который вижу там, результат будет не пустым.

Вот мой код

    public class Parameters
    {
        public DateTime? SinceDate { get; set; }
        public DateTime? UntilDate { get; set; }
        public byte NetworkId { get; set; } = 7;
    }

    var parameters = new Parameters()
    {
        SinceDate = startDate,
        UntilDate = endDate,
        NetworkId = networkId,
    };

    DynamicParameters requestParameters = new DynamicParameters();
    requestParameters .Add("@sinceDateFilter", parameters.SinceDate, DbType.DateTime);
    requestParameters .Add("@untilDateFilter", parameters.UntilDate, DbType.DateTime);
    requestParameters .Add("@networkId", parameters.networkId, DbType.Byte);

   using (var secondConn = new SqlConnection(ConnectionString))
   {
       var query = secondConn.Query<ReportRow>(
       "[dbo].[GET_Report] @sinceDateFilter, @untilDateFilter, @NetworkId",
       requestParameters,
       commandTimeout: 500
       );
       Groups = query.ToList();
   }


    public class ReportRow
    {
        public string Network { get; set; }
        public ulong Clicks { get; set; }
        public decimal Profit { get; set; }
    }

В отладчике я вижу, что мои "Группы"пусто, но если я запускаю SQL Server Profiler, я вижу, что запрос, сделанный этим кодом,

exec sp_executesql N'[dbo].[GET_Report] @sinceDateFilter, @untilDateFilter, @networkId',N'@sinceDateFilter datetime,@untilDateFilter datetime, @networkId tinyint',@sinceDateFilter='2019-04-01 00:00:00',@untilDateFilter='2019-04-02 00:00:00',@networkId=7

И если я выполняю это из Management Studio, я вижу таблицу с данными:

+----------+--------+--------+
| Network  | Clicks | Profit |
+----------+--------+--------+
| Network1 |  38835 | 0.45   |
| Network2 |  38835 | 0.35   |
+----------+--------+--------+

1 Ответ

0 голосов
/ 01 апреля 2019

Если вы хотите выполнить с помощью хранимой процедуры.

Вы можете попытаться установить commandType параметр.

Настройка с помощью CommandType.StoredProcedure

using (var secondConn = new SqlConnection(ConnectionString))
{
   var query = secondConn.Query<ReportRow>(
   "[dbo].[GET_Report]",
   requestParameters,
   commandTimeout: 500, 
   commandType: CommandType.StoredProcedure
   );
   Groups = query.ToList();
}
...