Vb.net 值类型';System.Data.DataRow';无法转换为';数据类型';

Vb.net 值类型';System.Data.DataRow';无法转换为';数据类型';,vb.net,Vb.net,我正在学习我们学校提供的一本书,而这本书并没有解决错误,所以我不知道如何解决这个问题(我们的老师只是说要学习这本书)。无论如何,数据类型的转换似乎有问题,我也尝试了Cstr和其他方法,得到了相同的结果。我还决定关闭Option Strict,因为提供的代码出现了错误,到目前为止,这个类是唯一的问题,之后应用程序应该开始工作 Imports System.Data.OleDb Public Class clsBookDA Private Shared dcnBooks As New OleDbC

我正在学习我们学校提供的一本书,而这本书并没有解决错误,所以我不知道如何解决这个问题(我们的老师只是说要学习这本书)。无论如何,数据类型的转换似乎有问题,我也尝试了Cstr和其他方法,得到了相同的结果。我还决定关闭
Option Strict
,因为提供的代码出现了错误,到目前为止,这个类是唯一的问题,之后应用程序应该开始工作

Imports System.Data.OleDb

Public Class clsBookDA
Private Shared dcnBooks As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.12.0;Data Source=C:\temp\books.mdb")

Private Shared books As New ArrayList()

Private Shared aBook As clsBook
Private Shared aBookID, anAuthor, aTitle As String
Private Shared aPurchasePrice, aSalePrice As Decimal
Private Shared anInventory As Integer

Public Shared Sub Initialize()
    dcnBooks.Open()
End Sub

Public Shared Sub Terminate()
    dcnBooks.Close()
    dcnBooks.Dispose()
End Sub

Public Shared Function GetAll() As ArrayList
    Dim dapBooks As New OleDbDataAdapter()
    Dim dtbBooks As New DataTable()
    Dim drwBook As DataRow()

    dapBooks = New OleDbDataAdapter("Select * From Books", dcnBooks)
    dapBooks.Fill(dtbBooks)

    books.Clear()
    For Each drwBook In dtbBooks.Rows
        aBookID = drwBook("BookID") 'error converting to string'
        anAuthor = drwBook("Author") 'error converting to string'
        aTitle = drwBook("Title") 'error converting to string'
        aPurchasePrice = drwBook("PurchasePrice") 'error converting to decimal'
        aSalePrice = drwBook("SalePrice") 'error converting to decimal'
        anInventory = drwBook("Inventory") 'error converting to integer'
        Dim aBook As New clsBook(aBookID, anAuthor, aTitle, aPurchasePrice, aSalePrice, anInventory)
        books.Add(aBook)
    Next
    Return books
End Function

Public Shared Sub Add(ByVal aBook As clsBook)
    Dim dapBooks As New OleDbDataAdapter()
    Dim sqlQuery As String = "INSERT INTO Books" & "VALUES ('" & _
        aBook.aBookID & "','" & aBook.Author & "','" & aBook.Title & "','" & _
        aBook.PurchasePrice & "','" & aBook.SalePrice & "','" & _
        aBook.Inventory & "')"

    dapBooks.UpdateCommand = New OleDbCommand(sqlQuery, dcnBooks)
    dapBooks.UpdateCommand.ExecuteNonQuery()
End Sub

Public Shared Sub Update(ByVal aBook As clsBook)
    Dim dapBooks As New OleDbDataAdapter()
    Dim sqlQuery As String = "UPDATE Books" & "SET Author = '" & _
        aBook.Author & "',Title ='" & aBook.Title & "',PurchasePrice='" & _
        aBook.PurchasePrice & "',SalePrice='" & aBook.SalePrice & _
        "',Inventory='" & aBook.Inventory & "'" & _
        "WHERE BookID='" & aBook.BookID & "'"

    dapBooks.UpdateCommand = New OleDbCommand(sqlQuery, dcnBooks)
    dapBooks.UpdateCommand.ExecuteNonQuery()
End Sub

Public Shared Sub Delete(ByVal aBook As clsBook)
    Dim dapBooks As New OleDbDataAdapter()
    Dim sqlQuery As String = "DELETE FROM Books WHERE BookID = '" & _
        aBook.BookID & "'"

    dapBooks.UpdateCommand = New OleDbCommand(sqlQuery, dcnBooks)
    dapBooks.UpdateCommand.ExecuteNonQuery()
End Sub

Private Shared Function Author() As Object
    Throw New NotImplementedException
End Function

Private Shared Function BookID() As Object
    Throw New NotImplementedException
End Function

如果您将这些东西从对象(它们存储的形式)强制转换为它们的实际类型(存储在对象中),则End Class

选项Strict On不会抱怨:


使用诸如drwBook(“BookID”).tostring()之类的转换函数。

您引用的是DataRow类,而不是数据库中存储的值,因此无法转换为系统类型。您的列标题可以在drwBook中使用。item(“heading”)Ref:item[DataColumn]获取或设置存储在指定DataColumn中的数据。我尝试将Dim drwBook作为DataColumn,但当我尝试这样做“drwBook.Item(“heading”)”时,它说该项不是System.Array的一部分
    For Each drwBook In dtbBooks.Rows
        aBookID = DirectCast(drwBook("BookID"), String)
        anAuthor = DirectCast(drwBook("Author"), String)
        aTitle = DirectCast(drwBook("Title"), String)
        aPurchasePrice = DirectCast(drwBook("PurchasePrice"), Decimal)
        aSalePrice = DirectCast(drwBook("SalePrice"), Decimal)
        anInventory = DirectCast(drwBook("Inventory"), Integer)
        Dim aBook As New clsBook(aBookID, anAuthor, aTitle, aPurchasePrice, aSalePrice, anInventory)
        books.Add(aBook)
    Next