0

Customersから挿入、更新、および削除するフォームを実装するプロジェクトがありますNorthwind -> Customers。すべての操作の後に挿入、更新、および更新を行うことができましたが、削除は機能せず、FK 例外がスローされます。削除時にカスケードする必要がありますが、方法がわかりません..

私のフォームは次のようになります。

ここに画像の説明を入力

および私の削除手順(これまでのところ、カスケードはありません):

CREATE Procedure [dbo].[DeleteCustomer]
(
    @Original_CustomerID nchar(5)
)
AS
  SET NOCOUNT OFF; 

  DELETE FROM [dbo].[Customers]
  WHERE 
  (
    (
        [CustomerID] = @Original_CustomerID
    )
)

場合によっては機能しますが、エラーが発生する場合もあります。

DELETE ステートメントは、REFERENCE 制約 "FK_Orders_Customers" と競合しました。データベース「Northwind」、テーブル「dbo.Orders」、列「CustomerID」で競合が発生しました。ステートメントは終了されました。

削除時にカスケードを追加して、このプロジェクトを完了するのを手伝ってくれる人はいますか?

それは Northwind Traders データベース、Customerテーブルです。

4

2 に答える 2

0

コードはどこに置きますか?ストアドプロシージャとして保存/実行しますか?それでも例外がスローされます。:/私の削除:

private void buttonDelete_Click(object sender, RoutedEventArgs e)
{            
    SqlConnection cn = new SqlConnection(@"Integrated Security=SSPI;Initial Catalog=Northwind;Data Source=(local)");
    SqlCommand cmd = new SqlCommand("DeleteCustomer", cn);
    cmd.CommandType = CommandType.StoredProcedure;

    cmd.Parameters.AddWithValue("@Original_CustomerID", textBox_CompanyID.Text);

    cn.Open();
    cmd.ExecuteNonQuery();
    cn.Close();

    lbxCustomers.Items.Clear();
    this.init();
}

私のDeleteCustomer手順:

CREATE Procedure [dbo].[DeleteCustomer]
(
    @Original_CustomerID nchar(5)
)
AS

SET NOCOUNT OFF; 

DELETE FROM [dbo].[Customers]
WHERE 
(
    (
        [CustomerID] = @Original_CustomerID
    )
)

そして、私はあなたのコードを持っていますが、それを機能させるために私のプロジェクトにそれを追加する方法がわかりません。したがって、アプリケーションを再起動したり、コンピューターを切り替えたりしても、引き続き機能します。助けてください..それは新しいエラーだと思います。見た目どおりに接続された3つのテーブルがあります:

The DELETE statement conflicted with the REFERENCE constraint "FK_Order_Details_Orders". The conflict occurred in database "Northwind", table "dbo.Order Details", column 'OrderID'.
The statement has been terminated.
于 2012-12-31T03:05:51.100 に答える
0

これを処理する簡単な方法の 1 つは、SQL Enterprise Manager (または任意の ISQLW インタープリター) で、制約を削除してカスケード削除制約として再読み込みすることです。

USE Northwind
GO
ALTER TABLE Orders
  DROP CONSTRAINT
    FK_Orders_Customers
GO
ALTER TABLE Orders
  ADD 
    CONSTRAINT FK_Orders_Customers FOREIGN KEY
    (
        CustomerID
     ) REFERENCES Customers
        CustomerID
     ) ON CASCADE DELETE
GO

厳密なストアド プロシージャ ソリューションが必要な場合は、元のストアド プロシージャの次のリビジョンを使用できます。

CREATE Procedure [dbo].[DeleteCustomer] (
    @Original_CustomerID nchar(5)
)
AS

SET NOCOUNT OFF; 

  DELETE 
    FROM [dbo].[Orders]
   WHERE [CustomerID] = @Original_CustomerID

  DELETE 
    FROM [dbo].[Customers]
   WHERE [CustomerID] = @Original_CustomerID
于 2012-12-31T02:06:00.197 に答える