Возможно ли выполнить расширенный SQL запрос в ASP. NET MVC? - PullRequest
0 голосов
/ 01 апреля 2020

Возможно ли выполнить этот SQL запрос к списку в ASP. NET MVC?

Предыдущие SQL запросы не были расширены, поэтому я мог приписать каждый столбец с результат для поля в модели.

Контроллер:

public ActionResult Firmy(Firmy_Query model)
{
        string parametra = model.parametr1.ToString();
        string parametrb = model.parametr2.ToString();

        ViewBag.Data_start = parametra;
        ViewBag.Data_finish = parametrb;

        List<Models.FirmyPub> list = new List<Models.FirmyPub>();

        try
        {
            using (SqlConnection con = new SqlConnection())
            {
                String sql = @"DECLARE @SelectCols nvarchar(MAX), @Cols nvarchar(MAX), @Query nvarchar(MAX), "
                            + "@MinDate date = '" +parametra + "', "
                            + "@MaxDate date = '" + parametrb + "' "
                            + "SET @SelectCols = STUFF((SELECT TOP (DATEDIFF(DAY, @MinDate, @MaxDate) + 1) "
                            + "',ISNULL(' + QUOTENAME (CAST(DATEADD(DAY, ROW_NUMBER() OVER(ORDER BY a.object_id) - 1, @MinDate)AS varchar(20)))+',0) AS '+QUOTENAME (CAST(DATEADD(DAY, ROW_NUMBER() OVER(ORDER BY a.object_id) - 1, @MinDate)AS varchar(20))) "
                            + "FROM sys.all_objects a CROSS JOIN sys.all_objects b "
                            + "FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),1,1,'') "
                            + "SET @Cols = STUFF((SELECT TOP (DATEDIFF(DAY, @MinDate, @MaxDate) + 1) "
                            + "',' + QUOTENAME(CAST(DATEADD(DAY, ROW_NUMBER() OVER(ORDER BY a.object_id) - 1, @MinDate)AS varchar(20))) "
                            + "FROM sys.all_objects a CROSS JOIN sys.all_objects b "
                            + "FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),1,1,'') "
                            + "SET @Query ='DECLARE @MinDate1 DATE = ''' + CAST(@MinDate AS varchar(20)) +''' "
                            + "DECLARE @MaxDate1 DATE = ''' +CAST(@MaxDate AS varchar(20)) + ''' "
                            + "SELECT FIRMA,' + @SelectCols + ' FROM "
                            + "( "
                            + "SELECT Shortcut as FIRMA, cast(mg.data as date) as DATA, CAST(ABS(SUM(mg.wartoscWz)) as decimal(20, 2)) as WART "
                            + "FROM HM.MG "
                            + "INNER JOIN SSCommon.STContractors STC ON MG.khid = STC.id "
                            + "WHERE MG.subtyp = 89 "
                            + "AND MG.aktywny = 1 "
                            + "AND MG.anulowany = 0 "
                            + "AND MG.bufor = 0 "
                            + "AND MG.kod like ''%PZ'' "
                            + "AND MG.typ_dk <> ''SrT'' "
                            + "AND MG.createdDate >= @MinDate1 and MG.createdDate < DATEADD(day, 1, @MaxDate1) "
                            + "Group by (Shortcut), mg.data "
                            + ") DANE "
                            + "PIVOT "
                            + "( "
                            + "max(WART) FOR [DATA] IN ( ' +@cols+ ') "
                            + ") p "
                            + "ORDER BY FIRMA";

                con.ConnectionString = @"";

                DataTable dt = new DataTable();
                SqlDataAdapter da = new SqlDataAdapter();
                da.SelectCommand = new SqlCommand(sql, con);

                da.Fill(dt);

                foreach (DataRow row in dt.Rows)
                {
                    string firmaSTR = "FIRMA";
                    var pub = new FirmyPub();
                    pub.firma = row[firmaSTR].ToString();

                    list.Add(pub);
                }

                return View(list);
            }
        }
        catch
        {
            return View("Error");
        }
    }

Этот результат запроса SQL представляет собой один столбец FIRMA и столбцы с днями, которые пользователь получает в другом представлении. Мой вопрос, возможно ли выполнить этот SQL запрос? Если это возможно, как приписать динамические c столбцы для модели, которая публикует результаты?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...