我至少有几天无法解决一个非常典型的问题。我还是新手,这就是为什么我寻求帮助。
我有一个SQL Server数据库,其中有一个表,该表每4小时更新一次。某些行或整个委员会名称的可能性为50%,在该表的下一次更新中不会出现。
我在页面上获取的数据如下所示,并以帮助者的身份调用母版:
@helper drawSummaryTable(String option, String tableType)
{
var db = Database.Open("CommissionsDB");
var query = "SELECT * FROM SiempelBizRepTabNew";
var generateData = db.Query(query);
query = @"SELECT
COUNT(Commission_Name),
SUM(Consumption) as Consumption,
SUM(Obligo) as Obligo,
SUM(ActualCosts) as ActualCosts,
SUM(Summary) as Summary
FROM SiempelBizRepTabNew
WHERE Commission_Name LIKE @0";
var ComName = "%" + Request["ComName"] + "%";
var data = db.Query(query, ComName);
var grid = new WebGrid(data, ajaxUpdateContainerId: "grid", canPage: false, canSort: false);
<h1>BestellObligo</h1>
<form method="post">
<div id="gridContainer">
<div id="grid" style="width: 100%; height: 150px;">
Commission name: <input type="text" name="ComName" value="@Request["ComName"]" placeholder="Type here Commission name" />
<input type="submit" value="Show" />
<p>Calculated values displayed for: <strong> @Request.Form["ComName"]</strong></p>
@grid.GetHtml(
tableStyle: "table",
alternatingRowStyle: "alternate",
headerStyle: "header",
columns: grid.Columns(
grid.Column("Consumption", "Consumption{Ist Kosten Material}", format: @<text>@item.Consumption.ToString("#,0") €</text>),
grid.Column("Obligo", "Obligo+ImHaus", format:@<text>@item.Obligo.ToString("#,0") €</text>),
grid.Column("ActualCosts", "ActualCosts{Ist Fertigung}", format:@<text>@item.AktualNaklady.ToString("#,0") €</text>),
grid.Column("Summary", "Summary{Gesamt}", format:@<text>@item.Summary.ToString("#,0") €</text>))
)
</div>
</div>
</form>
在第二个查询变量中使用过滤器的where子句(... LIKE @ 0)。当我键入表中实际存在的佣金名称时,返回的是所有元素的SUM值。即使这种解决方案不太合适,也很好。
问题是,当我想输入表中不再存在的佣金名称时,应用程序将引发错误“无法对空引用执行运行时绑定”
我知道问题是什么,我只是不知道该如何解决。我需要以某种方式添加对“数据”查询的验证“ 如果返回的行比show(count)多,否则显示文本,表明佣金名称或关键字已不存在” >
这对于错误键入的佣金名称可能很有用。感谢您的帮助!
答案 0 :(得分:0)
您可以检查查询是否返回任何数据,然后显示数据或显示消息。您可以使用Any()
检查是否找到任何结果,也可以使用Count()
返回行数(检查是否大于0)。
var data = db.Query(query, ComName);
//if (data.Count() > 0)
if (data.Any())
{
var grid = new WebGrid(data, ajaxUpdateContainerId: "grid", canPage: false, canSort: false);
//Rest of your code relating to showing your grid here
}
else
{
//Show a message here that there was no data
}