すべての操作に 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