运行 SQL 2sxc 剃须刀模板中的查询

Running SQL queries in 2sxc razor templates

我使用 2sxc 进行研究项目,统计是我工作中最重要的部分。使用 link 和可视化查询,我可以毫不费力地完成 90% 的工作。但是,有时我需要优化的数据库 table (具有字段 - 值结构),例如在单个 运行 上搜索多个列(计算 "yes" 例如在所有问题中)。使用一点 fiddle 我可以通过以下查询获得此类数据:

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 中的视图代码上实现它。

如何输出此查询输出的 table?

如果我添加一个简单的 SELECT COUNT,我如何将结果放入 c# 变量中?

所以核心问题是你是想使用可视化查询还是想在你的视图中使用c#代码。我推荐视觉查询,但除此之外它基本上是 c# 中的标准 Microsoft DB 对象(与 2sxc 无关)。

您可以在此处找到一些示例 https://2sxc.org/en/Docs/Feature/feature/2579,尤其是 带数据表(无数据源)的代码示例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>