Выполнение SQL-запросов в шаблонах 2sxc razor

Я использую 2sxc для исследовательских проектов, и статистика - самая важная часть моей работы. С помощью ссылок и визуальных запросов я могу выполнять 90% работы без каких-либо проблем. Однако бывают случаи, когда мне нужна оптимизированная таблица базы данных (со структурой «поле - значение»), например, для выполнения поиска по нескольким столбцам за один прогон (например, подсчет числа «да» во всех вопросах). Немного потрудившись, я могу получить этот тип данных с помощью следующего запроса:

SELECT dbo.ToSIC_EAV_Attributes.StaticName, dbo.ToSIC_EAV_Values.Value
FROM dbo.ToSIC_EAV_Values
LEFT JOIN dbo.ToSIC_EAV_Attributes
ON dbo.ToSIC_EAV_Values.AttributeID = dbo.ToSIC_EAV_Attributes.AttributeID
LEFT JOIN dbo.ToSIC_EAV_AttributesInSets
ON dbo.ToSIC_EAV_Values.AttributeID = dbo.ToSIC_EAV_AttributesInSets.AttributeID
WHERE dbo.ToSIC_EAV_AttributesInSets.AttributeSetID = <my entity SetID>;

Чего у меня нет, так это знаний, чтобы реализовать это в коде представления в 2sxc.

Как я могу вывести таблицу, которую выводит этот запрос?

И если я добавлю простой SELECT COUNT, как я могу поместить результат в переменную C #?


person João Gomes    schedule 17.01.2018    source источник


Ответы (1)


Итак, основной вопрос заключается в том, хотите ли вы использовать визуальный запрос или хотите использовать код C # в своем представлении. Я рекомендую визуальный запрос, но в остальном это стандартные объекты Microsoft DB в C # (ничего не связанное с 2sxc).

Вы можете найти здесь несколько примеров https://2sxc.org/en/Docs/Feature/feature/2579, особенно Пример кода с DataTable (без DataSource) или пример DataReader. Это примерно так:

@using System.Configuration

@using System.Data.SqlClient

@functions{

   private SqlDataReader myReader;



   // Official place to provide data preparation. Is automatically called by 2SexyContent

   public override void CustomizeData()

   {

         var conString = ConfigurationManager.ConnectionStrings[Content.ConnectionName].ToString();

         var con = new SqlConnection(conString);

         con.Open();

         var command = new SqlCommand("Select Top 10 * from Files Where PortalId = @PortalId", con);

         command.Parameters.Add("@PortalId", Dnn.Portal.PortalId);

         myReader = command.ExecuteReader();

   }

}

<div class="sc-element">

   @Content.Toolbar

   <h1>Simple Demo using DataReader access</h1>

   <p>This demo accesses the data directly, uses a SQL parameter for the PortalId then shows the first 10 files it finds. More intro-material for direct database access in this <a href="http://www.codeproject.com/Articles/4416/Beginners-guide-to-accessing-SQL-Server-through-C" target="_blank">article on codeplex</a>.</p>

   <h2>The top 10 files found in this portal</h2>

   <ol>

         @while (myReader.Read())

         {

                <li>@myReader["FileName"]</li>

         }

   </ol>

   @{

         myReader.Close();

   }

</div>
person iJungleBoy    schedule 19.01.2018
comment
Эти образцы предполагают какой-то контент, который не определен. Ошибка: Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: невозможно выполнить привязку времени выполнения к нулевой ссылке в CallSite.Target (Closure, CallSite, Object) в System.Dynamic.UpdateDelegates.UpdateAndExecute1 [T0, TRet] (сайт CallSite, T0 arg0) ASP._Page_Portals_1_2sxc_Demo__stats_cshtml.CustomizeData () в ... httpdocs \ Portals \ 1 \ 2sxc \ Demo_stats.cshtml: строка 17 - person João Gomes; 19.01.2018
comment
Извините. Я имел в виду вот это: Content.ConnectionName - person João Gomes; 23.01.2018
comment
И обе ссылки на приложение и демонстрацию не работают, поэтому я не могу скопировать настройки содержимого. - person João Gomes; 23.01.2018
comment
Хорошо ... Теперь я был ленив ... Найдите в списке приложений демонстрацию и нашел настройку SiteSqlServer. - person João Gomes; 23.01.2018