在Webmatrix.Database查询中获取无效项错误

时间:2014-01-15 20:28:03

标签: vb.net razor webmatrix

我在VB.NET中使用Webmatrix。我有一个声明为

的数据库
Dim db As Database
db = Database.Open("xxx")

我构建了这个查询:

Dim strQuery As String
strQuery = "SELECT NomexSheeter.BlockNumber, NomexSheeter.WorkOrder, dbo_tbl_WIPMASTER_NF.ITEM_NBR " _
            & "FROM NomexSheeter INNER JOIN dbo_tbl_WIPMASTER_NF ON NomexSheeter.WorkOrder = dbo_tbl_WIPMASTER_NF.WORK_ORDER " _
            & "WHERE NomexSheeter.WorkOrder = @0 AND NomexSheeter.BlockNumber = @1"

我这样调用查询:

Dim data = db.Query(strQuery, "99A", "901C")

这是一些标记...

<input type="hidden" id="barcodeValue" value="@data.ITEM_NBR"/>

运行显示以下内容的页面时出现编译错误:      'ITEM_NBR'不是'System.Collections.Generic.IEnumerable(Of Object)'的成员。

由于网上有很少的VB.NET Webmatrix文档,我只能猜测。

1 个答案:

答案 0 :(得分:1)

您的退货类型是一个集合。它是一个IEnumerable(Of Object)。要访问集合中各个元素的属性,您必须使用ElementAt()来访问特定项目或For Each循环来依次访问每个元素。

Dim data = db.QuerySingle(strQuery, "99A", "901C")
<input type="hidden" id="barcodeValue" value="@data.ElementAt(0).ITEM_NBR"/>

或者你可以使用First方法到达第一行,如果你确定至少会返回一行:

Dim data = db.QuerySingle(strQuery, "99A", "901C")
<input type="hidden" id="barcodeValue" value="@data.First().ITEM_NBR"/>

如果您只期望一行数据符合您的条件,则应使用QuerySingle方法而不是Query方法。返回一个对象,您可以直接访问它的属性。

Dim data = db.QuerySingle(strQuery, "99A", "901C")
<input type="hidden" id="barcodeValue" value="@data.ITEM_NBR"/>

在我的这篇以C#为重点的文章中,有更多关于各种数据库方法及其返回类型的内容,但您应该能够理解为什么每种返回类型都需要区别对待:http://www.mikesdotnetting.com/Article/214/How-To-Check-If-A-Query-Returns-Data-In-ASP.NET-Web-Pages