2017-04-06 256 views
0

我在SQL Server中3个表:UPDATE语句冲突与外键约束

CountriesTbl

CountryID int output, 
CountryName nvarchar (50), 
Nots nvarchar (Max), 
ModifiedBy nvarchar (30) 

CitiesTbl

CityID int output, 
CityName nvarchar (50), 
CountryID int, 
Nots nvarchar (Max), 
ModifiedBy nvarchar (30) 

CustomersTbl

CustomerID int output, 
CustomerName nvarchar (50), 
CustomerPhoto image, 
CustomerEmail nvarchar(Max), 
CustomerPhone1 nvarchar(12), 
CustomerPhone2 nvarchar(12), 
CustomerAddress nvarchar(Max), 
CustomerFax nvarchar(12), 
CustomerStatus bit, 
CountryID int, 
CityID int, 
Notes nvarchar (Max), 
ModifiedBy nvarchar (30) 

enter image description here

更新存储过程是这样的:

ALTER procedure [dbo].[Update_Customer_WithOutPic] 
    @CustomerID int, 
    @CustomerName nvarchar (50), 
    @CustomerEmail nvarchar(Max), 
    @CustomerPhone1 nvarchar(12), 
    @CustomerPhone2 nvarchar(12), 
    @CustomerAddress nvarchar(Max), 
    @CustomerFax nvarchar(12), 
    @CustomerStatus bit, 
    @CountryID int, 
    @CityID int, 
    @Notes nvarchar (Max), 
    @ModifiedBy nvarchar (30) 
AS 
BEGIN 
    UPDATE CustomersTbl 
    SET CustomerName = @CustomerName, 
     CustomerEmail = @CustomerEmail, 
     CustomerPhone1 = @CustomerPhone1, 
     CustomerPhone2 = @CustomerPhone2, 
     CustomerAddress = @CustomerAddress, 
     CustomerFax = @CustomerFax, 
     CustomerStatus = @CustomerStatus, 
     CountryID = @CountryID, 
     CityID = @CityID, 
     Notes = @Notes, 
     ModifiedDate = GETDATE(), 
     ModifiedBy = @ModifiedBy 
    WHERE 
     CustomerID = @CustomerID 
END 

在VB中,我有2类:数据层和业务层。

数据层 - 更新代码:

Friend Function Update_Customer_WithOutPic(ByVal CustomerID As String, ByVal CustomerName As String, ByVal CustomerEmail As String, ByVal CustomerPhone1 As String, ByVal CustomerPhone2 As String, ByVal CustomerAddress As String, ByVal CustomerFax As String, ByVal CustomerStatus As Boolean, ByVal CountryID As Integer, ByVal CityID As Integer, ByVal Notes As String, ByVal ModifiedBy As String) As String 
      Dim retval As String 
      Dim cmd As New SqlCommand("Update_Customer_WithOutPic") 
      cmd.Parameters.AddWithValue("@CustomerID", CustomerID) 
      cmd.Parameters.AddWithValue("@CustomerName", CustomerName) 
      cmd.Parameters.AddWithValue("@CustomerEmail", CustomerEmail) 
      cmd.Parameters.AddWithValue("@CustomerPhone1", CustomerPhone1) 
      cmd.Parameters.AddWithValue("@CustomerPhone2", CustomerPhone2) 
      cmd.Parameters.AddWithValue("@CustomerAddress", CustomerAddress) 
      cmd.Parameters.AddWithValue("@CustomerFax", CustomerFax) 
      cmd.Parameters.AddWithValue("@CustomerStatus", CustomerStatus) 
      cmd.Parameters.AddWithValue("@CountryID", CountryID) 
      cmd.Parameters.AddWithValue("@CityID", CityID) 
      cmd.Parameters.AddWithValue("@Notes", Notes) 
      cmd.Parameters.AddWithValue("@ModifiedBy", ModifiedBy) 

      retval = dm.executeNonQuery(cmd) 

      Return retval 
     End Function 

业务层:

Public Function Update_Customer_WithOutPic(ByVal CustomerID As String, ByVal CustomerName As String, ByVal CustomerEmail As String, ByVal CustomerPhone1 As String, ByVal CustomerPhone2 As String, ByVal CustomerAddress As String, ByVal CustomerFax As String, ByVal CustomerStatus As Boolean, ByVal CountryID As Integer, ByVal CityID As Integer, ByVal Notes As String, ByVal ModifiedBy As String) As String 
      Dim retval As String 
      retval = p.Update_Customer_WithOutPic(CustomerID, CustomerName, CustomerEmail, CustomerPhone1, CustomerPhone2, CustomerAddress, CustomerFax, CustomerStatus, CountryID, CityID, Notes, ModifiedBy) 
      Return retval 
     End Function 

现在更新按钮代码:

Dim retval As String = p.Update_Customer_WithOutPic(txtCustomerCode.Text, txtCustomerName.Text, txtCustomerEmail.Text, txtCustomerPhone1.Text, txtCustomerPhone2.Text, txtCustomerAddress.Text, txtCustomerFax.Text, CheckBox2.Checked, ComboCustomerCountry.SelectedValue, ComboCustomerCity.SelectedValue, txtCustomernote.Text, FrmMain.LblUserID.Text) 

我得到这个错误:

The UPDATE statement conflicted with the FOREIGN KEY constraint "FK_CustomersTbl_CountriesTbl". The conflict occurred in database "AlwaleedSSSystem", table "dbo.CountriesTbl", column 'CountryID'.

+4

听起来像是你是一个不存在的countryId – GuidoG

+1

是'CustomersTbl.CustomerStatus'连接到'CountriesTbl.CountryID'只是一个图的神器更新客户表? –

+0

CustomersTbl.CountryID连接到CountriesTbl.CountryID – Salem

回答

0

看起来您的客户表中指向您的国家/地区表的国家/地区的关键限制似乎是,您在国家/地区表中不存在的countryId在国家/地区表中不存在。确保从客户表引用的同一张表中加载您的国家/地区ID。

您应该阅读有关约束和数据库参照完整性的内容。 https://technet.microsoft.com/en-us/library/ms175464(v=sql.105).aspx