Bagikan melalui


Cara: Menghapus Baris Dari Database

Anda dapat menghapus baris dalam database dengan menghapus LINQ terkait ke objek SQL dari koleksi terkait tabelnya. LINQ ke SQL menerjemahkan perubahan Anda ke perintah SQL DELETE yang sesuai.

LINQ ke SQL tidak mendukung atau mengenali operasi penghapusan kaskade. Jika Anda ingin menghapus baris dalam tabel yang memiliki batasan terhadapnya, Anda harus menyelesaikan salah satu tugas berikut:

  • Atur ON DELETE CASCADE aturan dalam batasan kunci asing dalam database.

  • Gunakan kode Anda sendiri untuk terlebih dahulu menghapus objek turunan yang mencegah objek induk dihapus.

Jika tidak, pengecualian akan terjadi. Lihat contoh kode kedua nanti dalam topik ini.

Nota

Anda dapat mengganti metode default LINQ ke SQL untuk Insert, Update, dan Delete operasi database. Untuk informasi selengkapnya, lihat Menyesuaikan Operasi Sisipkan, Perbarui, dan Hapus.

Pengembang yang menggunakan Visual Studio dapat menggunakan Object Relational Designer untuk mengembangkan prosedur tersimpan untuk tujuan yang sama.

Langkah-langkah berikut mengasumsikan bahwa koneksi DataContext yang valid menyambungkan Anda ke database Northwind. Untuk informasi selengkapnya, lihat Cara: Menyambungkan ke Database.

Untuk menghapus baris dalam database

  1. Kueri database untuk baris yang akan dihapus.

  2. Panggil metode DeleteOnSubmit.

  3. Kirim perubahan ke database.

Contoh 1

Contoh kode pertama ini meminta database untuk detail pesanan milik Pesanan #11000, menandai detail pesanan ini untuk dihapus, dan mengirimkan perubahan ini ke database.

// Query the database for the rows to be deleted.
var deleteOrderDetails =
    from details in db.OrderDetails
    where details.OrderID == 11000
    select details;

foreach (var detail in deleteOrderDetails)
{
    db.OrderDetails.DeleteOnSubmit(detail);
}

try
{
    db.SubmitChanges();
}
catch (Exception e)
{
    Console.WriteLine(e);
    // Provide for exceptions.
}
' Query the database for the rows to be deleted.
Dim deleteOrderDetails = _
    From details In db.OrderDetails() _
    Where details.OrderID = 11000 _
    Select details

For Each detail As OrderDetail In deleteOrderDetails
    db.OrderDetails.DeleteOnSubmit(detail)
Next

Try
    db.SubmitChanges()
Catch ex As Exception
    Console.WriteLine(ex)
    ' Provide for exceptions
End Try

Contoh 2

Dalam contoh kedua ini, tujuannya adalah untuk menghapus pesanan (#10250). Kode pertama-tama OrderDetails memeriksa tabel untuk melihat apakah pesanan yang akan dihapus memiliki anak di sana. Jika pesanan memiliki anak, pertama-tama anak-anak dan kemudian pesanan ditandai untuk dihapus. DataContext menempatkan penghapusan aktual dalam urutan yang benar sehingga perintah penghapusan yang dikirim ke database mematuhi batasan database.

Northwnd db = new Northwnd(@"c:\northwnd.mdf");

db.Log = Console.Out;

// Specify order to be removed from database
int reqOrder = 10250;

// Fetch OrderDetails for requested order.
var ordDetailQuery =
    from odq in db.OrderDetails
    where odq.OrderID == reqOrder
    select odq;

foreach (var selectedDetail in ordDetailQuery)
{
    Console.WriteLine(selectedDetail.Product.ProductID);
    db.OrderDetails.DeleteOnSubmit(selectedDetail);
}

// Display progress.
Console.WriteLine("detail section finished.");
Console.ReadLine();

// Determine from Detail collection whether parent exists.
if (ordDetailQuery.Any())
{
    Console.WriteLine("The parent is present in the Orders collection.");
    // Fetch Order.
    try
    {
        var ordFetch =
            (from ofetch in db.Orders
             where ofetch.OrderID == reqOrder
             select ofetch).First();
        db.Orders.DeleteOnSubmit(ordFetch);
        Console.WriteLine($"{ordFetch.OrderID} OrderID is marked for deletion.");
    }
    catch (Exception e)
    {
        Console.WriteLine(e.Message);
        Console.ReadLine();
    }
}
else
{
    Console.WriteLine("There was no parent in the Orders collection.");
}

// Display progress.
Console.WriteLine("Order section finished.");
Console.ReadLine();

try
{
    db.SubmitChanges();
}
catch (Exception e)
{
    Console.WriteLine(e.Message);
    Console.ReadLine();
}

// Display progress.
Console.WriteLine("Submit finished.");
Console.ReadLine();
Dim db As New Northwnd("c:\northwnd.mdf")

db.Log = Console.Out
' Specify order to be removed from database.
Dim reqOrder As Integer = 10252

' Fetch OrderDetails for requested order.
Dim ordDetailQuery = _
From odq In db.OrderDetails _
Where odq.OrderID = reqOrder _
Select odq

For Each selectedDetail As OrderDetail In ordDetailQuery
    Console.WriteLine(selectedDetail.Product.ProductID)
    db.OrderDetails.DeleteOnSubmit(selectedDetail)
Next

' Display progress.
Console.WriteLine("Detail section finished.")
Console.ReadLine()

' Determine from Detail collection whether parent exists.
If ordDetailQuery.Any Then
    Console.WriteLine("The parent is present in the Orders collection.")
    ' Fetch order.
    Try
        Dim ordFetch = _
        (From ofetch In db.Orders _
         Where ofetch.OrderID = reqOrder _
         Select ofetch).First()

        db.Orders.DeleteOnSubmit(ordFetch)
        Console.WriteLine("{0} OrderID is marked for deletion.,", ordFetch.OrderID)

    Catch ex As Exception
        Console.WriteLine(ex.Message)
        Console.ReadLine()
    End Try

Else
    Console.WriteLine("There was no parent in the Orders collection.")

End If


' Display progress.
Console.WriteLine("Order section finished.")
Console.ReadLine()

Try
    db.SubmitChanges()

Catch ex As Exception
    Console.WriteLine(ex.Message)
    Console.ReadLine()

End Try

' Display progress.
Console.WriteLine("Submit finished.")
Console.ReadLine()

Lihat juga