运行 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>
我使用 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>