4

私のプロジェクトでは、2 つのデータベース テーブルに 2 つの DataSet を設定しています。これらのデータベース テーブルを埋めるために使用している方法を以下に示します。

SqlCommand sqlCommand = new SqlCommand();            
SqlCommand command;
using (SqlConnection conn = new SqlConnection(strConn))
{
    using (SqlCommand cmd = new SqlCommand(strQuery, conn))
    {
        using (SqlCommand cmdReset = new SqlCommand("DBCC CHECKIDENT('Doctor', RESEED, 0)", conn))
        {
            using (SqlCommand cmdUnCheck = new SqlCommand("alter table [dbo].[Doctor] nocheck constraint all",conn))
            {
                using (SqlCommand cmdCheck = new SqlCommand("alter table [dbo].[Doctor] with check check constraint all",conn))
                {
                    SqlDataAdapter da = new SqlDataAdapter(cmd);
                    conn.Open();
                    SqlTransaction sqlTransaction = conn.BeginTransaction();
                    cmd.Transaction = sqlTransaction;
                    cmdReset.Transaction = sqlTransaction;
                    cmdUnCheck.Transaction = sqlTransaction;
                    cmdCheck.Transaction = sqlTransaction;
                    try
                    {
                        cmdUnCheck.ExecuteNonQuery();
           /*ERROR*/    cmd.ExecuteNonQuery();
                        cmdReset.ExecuteNonQuery();//deleting database table data
                        foreach (DataRow dr in ds.Tables[0].Rows) //Inserting new data into the Database table
                        {
                            command = new SqlCommand(query.createDoctorRow("Doctor",
                            dr[1].ToString(), dr[2].ToString(), Convert.ToInt64(dr[3]), Convert.ToInt32(dr[4])), conn, sqlTransaction);
                            command.ExecuteNonQuery();
                        }
                        cmdCheck.ExecuteNonQuery();
                        sqlTransaction.Commit();
                        conn.Close();
                    }
                    catch (Exception e)
                    {
                        sqlTransaction.Rollback();
                        throw;
                    }
                }
            }
        }
    }                
}

上記のコードは、2 番目のデータベース テーブルが空になるまで正常に動作していましたが、データを挿入してコードを実行すると、VS でエラーが表示されます -->

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

これは、外部キーがクエリの実行を制限していることは明らかですが、私は初心者で何をすべきかわからないので、あなたの助けを求めています..

上記のコードでは、このSO の回答を参照して変更を加えましたが、喜びはありません。エラーは同じポイントにまだ存在します。

オプションusing:コード内のステートメントを減らす方法はありますか?

4

1 に答える 1