System.InvalidOperationException:“行/列不存在数据。”

问题描述 投票:0回答:1

表名称:tblStocks

列名称:Item_Code

示例如下:

商品代码

110001

220001

110002

220001

110003

代码:

sql = "SELECT LAST(Item_Code) as @item_code FROM tblStocks where
item_code LIKE '11%'"
        
cmd = New OleDbCommand(sql, cn)
dr = cmd.ExecuteReader
        
txtAvailable.Text = dr("@item_code").ToString

需要使用 SQL 显示最新的项目代码并将其显示在以 “11”开头的 TextBox 上

vb.net ms-access rdbms
1个回答
0
投票

由于查询返回单个值,您可以使用 ExecuteScalar。

您可以在新项目中快速尝试一下,只是为了进行实验,使用类似的东西(有一个名为“txtAvailable”的文本框):

Imports System.Data.OleDb

Public Class Form1
    Const CONNSTR As String = "your connection string here"

    Function GetAvailable() As String
        Dim available = ""

        Using conn As New OleDbConnection(CONNSTR)
            Dim sql = "SELECT LAST(Item_Code) AS ItemCode FROM tblStocks WHERE Item_Code LIKE '11*' ORDER BY Item_Code"

            Using cmd = New OleDbCommand(sql, conn)
                Dim result = cmd.ExecuteScalar()

                If result IsNot Nothing Then
                    available = CStr(result)
                End If

            End Using

        End Using

        Return available

    End Function

    Sub ShowAvailable()
        txtAvailable.Text = GetAvailable()

    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        ShowAvailable()

    End Sub

End Class

避免使用非字母数字字符,例如“@”,用于别名等内容。保持简单。

在该示例中,如果 ExecuteScalar 返回 Nothing,则查询没有返回任何值,因此您可能需要对此采取行动。

如果查询没有返回值,但您确定使用了完全正确的列名,则可能使用了错误的数据库文件。再次检查连接字符串。

始终使用

Using
结构进行数据库连接,以便在使用后立即正确处理它们 - 所有这些都旨在以这种方式正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.