ストアド プロシージャ ins_address は、スタンドアロンで使用した場合に機能し、エラーは発生しません。VB コード (以下を参照) を使用すると、tbl_AddressEntity に行が挿入されません。tbl_Address は問題ありません。ほぼ丸 2 日間頭を悩ませてきたので、崖から飛び降りる準備ができています。行が2番目のテーブルに挿入されない理由を誰かアドバイスできますか? ありがとうございました。
`
ALTER PROCEDURE [dbo].[ins_address]
@AddressLine1 AS VARCHAR(60),
@AddressLine2 AS VARCHAR(60),
@AddressLine3 AS VARCHAR(60),
@TownText AS VARCHAR(30),
@CountyText AS VARCHAR(30),
@PostcodeTownDistrictID AS INT,
@PostcodeOutwardCode AS VARCHAR(4),
@PostcodeInwardCode AS VARCHAR(3),
@SiteID AS INT,
@CompanyBranchID AS INT,
@PersonID AS INT,
@AddressTypeID AS INT,
@AddressID AS INT = -1 OUTPUT
AS
BEGIN TRY
INSERT INTO tbl_Address
(
AddressLine1,
AddressLine2,
AddressLine3,
TownText,
CountyText,
PostcodeTownDistrictID,
PostcodeOutwardCode,
PostcodeInwardCode
)
VALUES
(
@AddressLine1,
@AddressLine2,
@AddressLine3,
@TownText,
@CountyText,
@PostcodeTownDistrictID,
@PostcodeOutwardCode,
@PostcodeInwardCode
);
RETURN SCOPE_IDENTITY();
SELECT @AddressID = SCOPE_IDENTITY();
INSERT INTO tbl_AddressEntity
(
AddressID,
SiteID,
CompanyBranchID,
PersonID,
AddressTypeID
)
VALUES
(
@AddressID,
@SiteID,
@CompanyBranchID,
@PersonID,
@AddressTypeID
);
END TRY
BEGIN CATCH
DECLARE
@ErrorMessage nvarchar(2048)
,@ErrorSeverity int
,@ErrorState int
SELECT
@ErrorMessage = ERROR_MESSAGE()
,@ErrorSeverity = ERROR_SEVERITY()
,@ErrorState = ERROR_STATE();
IF @@TRANCOUNT > 0
RAISERROR(@ErrorMessage, @ErrorSeverity, @ErrorState);
END CATCH
`
`
Private Sub UBSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles UBSave.Click
Try
If Not formOptions(0).Contains("Company Customer") Then
'Force commit of data changes to DS
**Me.UGAddresses.UpdateData()**
Me.UGContactInformation.UpdateData()
'Merge text boxes into DS
getNonCompanyCustomerFields()
'Save the contact first!
kernel.updateContact(Me.DsContact1)
'Now assuming we have the PKID from the contact insert, update associations to match!
If formOptions(0).Contains("New") Then
For Each row As DataRow In DsAddress1.Tables(0).Rows
If row.RowState = DataRowState.Added Then
If row.Item("PersonID") Is System.DBNull.Value Then
row.Item("PersonID") = DsContact1.Tables(0).Rows(0).Item("PersonID")
End If
End If
Next
For Each row As DataRow In DsContactInfo1.Tables(0).Rows
If row.RowState = DataRowState.Added Then
If row.Item("PersonID") Is System.DBNull.Value Then
row.Item("PersonID") = DsContact1.Tables(0).Rows(0).Item("PersonID")
End If
End If
Next
If Me.UTCMain.Tabs("Customer").Visible Then
Me.DsCustomers1.Tables(0).Rows(0).Item("PersonID") = DsContact1.Tables(0).Rows(0).Item("PersonID")
End If
End If
**kernel.updateAddresses(Me.DsAddress1)**
kernel.updateContactInfo(Me.DsContactInfo1)
If Me.UTCMain.Tabs("PersonCustomer").Visible Then
kernel.updateCustomer(Me.DsCustomers1)
End If
Me.Text = Me.Text.Replace(" *", "")
'Company Customer
Else
getCompanyCustomerFields()
kernel.updateCustomer(Me.DsCustomers1)
Me.Text = Me.Text.Replace(" *", "")
End If
Catch ex As Exception
MsgBox("Exception thrown during save : " & ex.Message, MsgBoxStyle.Exclamation)
mySharedFunctions.LogProgress("frmContact.UBSave_Click - Error : " & ex.Message & vbCrLf & ex.StackTrace)
If Not ex.InnerException Is Nothing Then
mySharedFunctions.LogProgress("Inner exception : " & ex.InnerException.Message)
End If
End Try
End Sub
`
データアダプタの更新手順: `
Public Sub updateAddresses(ByRef dsTemp As dsAddress)
'For inserts we're passing back the new PKID amd syncing with the dataset via the source column mapping on the insert command.
'So we should be able to update by ref.
Me.SqlDaAddress.Update(dsTemp)
End Sub
`
DsAddress1 データセットには、関連するストアド プロシージャ内のこの select ステートメントからの結果を含む 1 つのテーブルが含まれています。
ALTER PROCEDURE [dbo].[get_address_by_companybranch_or_person]
/*@SiteID AS INT = -1,*/
@CompanyBranchID AS INT = -1,
@PersonID AS INT = -1
AS
IF @CompanyBranchID != -1
BEGIN
SELECT dbo.tbl_Address.AddressID, dbo.tbl_Address.AddressLine1, dbo.tbl_Address.AddressLine2, dbo.tbl_Address.AddressLine3,
dbo.tbl_Address.TownText, dbo.tbl_Address.CountyText, dbo.tbl_Address.PostcodeTownDistrictID, dbo.tbl_Address.PostcodeOutwardCode,
dbo.tbl_Address.PostcodeInwardCode, dbo.tbl_AddressEntity.SiteID, dbo.tbl_AddressEntity.CompanyBranchID, dbo.tbl_AddressEntity.PersonID,
dbo.tbl_AddressEntity.AddressTypeID
FROM dbo.tbl_Address INNER JOIN
dbo.tbl_AddressEntity ON dbo.tbl_Address.AddressID = dbo.tbl_AddressEntity.AddressID
WHERE CompanyBranchID = @CompanyBranchID
END
ELSE
BEGIN
SELECT dbo.tbl_Address.AddressID, dbo.tbl_Address.AddressLine1, dbo.tbl_Address.AddressLine2, dbo.tbl_Address.AddressLine3,
dbo.tbl_Address.TownText, dbo.tbl_Address.CountyText, dbo.tbl_Address.PostcodeTownDistrictID, dbo.tbl_Address.PostcodeOutwardCode,
dbo.tbl_Address.PostcodeInwardCode, dbo.tbl_AddressEntity.SiteID, dbo.tbl_AddressEntity.CompanyBranchID, dbo.tbl_AddressEntity.PersonID,
dbo.tbl_AddressEntity.AddressTypeID
FROM dbo.tbl_Address INNER JOIN
dbo.tbl_AddressEntity ON dbo.tbl_Address.AddressID = dbo.tbl_AddressEntity.AddressID
WHERE PersonID = @PersonID
END
`