2016-05-26 5 views
2

[UserData]と[HotelData]という2つのテーブルがあります。それらを外部キーとリンクしました。これは "Username"であり、これまでにUsernameが入力された場合は削除し、2番目のテーブルでもそのデータを削除したいとします。私はSQLコマンドやC#を書く方法を知らない。 REFERENCE制約 "FKHotelData" と競合DELETE文:他のテーブルの親行のデータを含む行を削除する方法

タイプの未処理の例外は、 'System.Data.SqlClient.SqlException' はのSystem.Data.dll

に追加情報を起こりました。競合はデータベース "E:¥GRADED UNIT DEV¥BLACKMARCH¥BLACKMARCH¥BIN¥DEBUG¥DATABASEBM.MDF"、 テーブル "dbo.HotelData"、列 'Username'で発生しました。

ステートメントが終了しました。

private void btnDelete_Click(object sender, EventArgs e) 
{ 
    SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=E:\Graded unit Dev\BlackMarch\BlackMarch\bin\Debug\DataBaseBM.mdf;Integrated Security=True;Connect Timeout=30"); 
    string sqlStatement = "DELETE FROM UserData WHERE Username = @Username"; 
    con.Open(); 
    SqlCommand cmd = new SqlCommand(sqlStatement, con); 
    cmd.Parameters.AddWithValue("@Username", txtUsernameUser.Text); 
    cmd.CommandType = CommandType.Text; 
    cmd.ExecuteNonQuery(); 
    con.Close(); 
} 
+1

が続き、その後UserDateからです。 –

+0

メッセージは非常に説明的です。あなたがFKの制約を持っているので、あなたが最初にHotelDataから関連するエントリーを削除しない限り、UserDataからエントリーを削除することはできません – apomene

+0

テーブル構造とモデルを表示できます – anand

答えて

2

あなたはUserDataテーブルからレコードを削除すると、子テーブルのデータを削除するために、任意のコードを記述する必要はありません。ちょうどCascade削除動作を使用してください。つまり、親テーブルのレコードが削除されると、子テーブルの対応するレコードが自動的に削除されます。

次の手順で行います。

  1. オープン子テーブルのデザイナーと
  2. 変更にINSERTとUPDATE仕様拡張開いたウィンドウで、表デザイナーでから削除ルールを関係
  3. をクリックしてくださいアクションなしカスケード
以下の画像のように

enter image description here

1

REFERENCE制約と競合DELETE文の「FKHotelData」

あなたは制約があり、これはパフォーマンスで支援している、自分に好意を行います既定値が0のIsDeleted列を追加するか、または何も影響を与えないようにnullを許可するようにします。

その後、ここでのポイントは、そのそのホテルのビジネスであると彼らは予約メトリックス/レポート作成をお勧めします条件

WHERE IsDeleted = 0

を含んでWHERE句を持っているあなたのSELECTクエリを変更します。医療と機密保持の目的のために、私はカスケード削除の回答に傾いています。このシナリオでは、を論理的にの代わりに削除すると、の代わりに物理的にのデータが削除されます。

0

厳密には理想的ではないが、利用可能でなければならない他のオプションを拡張する。しかし、CASCADEは使いやすくなっています。それがなければ

は、あなたの最善の策は

DELETE FROM HotelData WHERE Username = @Username 

が最初HotelDataから削除

DELETE FROM UserData WHERE Username = @Username 
関連する問題