1

すべての操作に SP を使用するテーブル アダプターがあります。Fill と Update のフィールドの 1 つはタイムスタンプ (bigint にキャストされ、"VersionNo" という名前) で、更新中の同時実行チェックに使用します。このフィールドと別の「名前」という名前のフィールドは、テーブル アダプターで何らかの理由で読み取り専用に設定されているため、SP 列を変更してアダプターを更新するたびに、読み取り専用に設定され、更新が失敗します。それらを ReadOnly = False に変更することを忘れないでください。

データベーススキーマを変更するたびに手動で更新する必要がないように、読み取り専用に設定されている理由とその修正方法を誰かが説明できますか? 失敗する場所は次のとおりです。

<Global.System.Diagnostics.DebuggerNonUserCodeAttribute(),  _
 Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")>  _
Public Property VersionNo() As Long
    Get
        Try 
            Return CType(Me(Me.tableShipping_Invoice.VersionNoColumn),Long)
        Catch e As Global.System.InvalidCastException
            Throw New Global.System.Data.StrongTypingException("The value for column 'VersionNo' in table 'Shipping_Invoice' is DBNull.", e)
        End Try
    End Get
    Set
        Me(Me.tableShipping_Invoice.VersionNoColumn) = value
    End Set
End Property

列「名前」は更新手順でも使用されていないため、なぜそれについて不平を言っているのかわかりません。

<UpdateParameters>
                <asp:ControlParameter ControlID="dvInvoice$txtVersionNo" PropertyName="Text" Name="VersionNo" Type="Int64" />
                <asp:ControlParameter ControlID="dvInvoice$txtTripNo" PropertyName="Text" Name="TripNo" Type="String" />
                <asp:ControlParameter ControlID="dvInvoice$ddLineTypes" PropertyName="SelectedValue" Name="TypeID" Type="Int32" />
                <asp:ControlParameter ControlID="dvInvoice$ddVendors" PropertyName="SelectedValue" Name="VendorID" Type="Int32" />
                <asp:ControlParameter ControlID="dvInvoice$txtInvNo" PropertyName="Text" Name="InvNo" Type="String" />
                <asp:ControlParameter ControlID="dvInvoice$txtInvAmount"  PropertyName="Text" Name="InvAmount" Type="Decimal" />
                <asp:ControlParameter ControlID="dvInvoice$txtInvDate" PropertyName="Text" Name="InvDate" Type="DateTime" />
                <asp:ControlParameter ControlID="dvInvoice$txtID" PropertyName="Text" Name="ID" Type="Int32" />
            </UpdateParameters>

BLLコード

    <System.ComponentModel.DataObjectMethodAttribute _
(System.ComponentModel.DataObjectMethodType.Update, True)> _
    Public Function UpdateInvoiceOC( _
                               TripNo As String, _
                               TypeID As Integer, _
                               VendorID As Integer, _
                               InvNo As String, _
                               InvAmount As Decimal, _
                               InvDate As Date, _
                               ID As Integer, _
                               VersionNo As Long _
                               ) As Boolean

        'STEP 1: Read in the current database product information
        Dim invoices As WolfShipping.Shipping_InvoiceDataTable = Adapter.GetInvoicesByInvoiceID(ID)
        If invoices.Count = 0 Then
            Return False
        End If
        Dim invoice As WolfShipping.Shipping_InvoiceRow = invoices(0)



        ' invoice.trip contains original values and will be udpated with new value
        invoice.TripNo = TripNo
        invoice.TypeID = TypeID
        invoice.VendorID = VendorID
        invoice.InvNo = InvNo
        invoice.InvAmount = InvAmount
        invoice.InvDate = InvDate
        invoice.ID = ID
        invoice.VersionNo = VersionNo
        Dim rowsAffected As Integer = Adapter.Update(invoice)
        ' Return true if precisely one row was updated, otherwise false
        Return rowsAffected = 1



    End Function
4

0 に答える 0