Sambungkan aplikasi ASP.NET ke Azure SQL Database

Selesai

Ada berbagai cara untuk menyambungkan ke database dalam layanan Azure SQL Database dari aplikasi. Untuk aplikasi .NET, Anda dapat menggunakan System.Data.SqlClient pustaka.

Aplikasi web untuk universitas harus mengambil dan menampilkan data yang Anda unggah ke database SQL Anda. Di unit ini, Anda mempelajari cara menyambungkan ke database dari aplikasi web dan menggunakan System.Data.SqlClient pustaka untuk memproses data.

Gambaaran umum pustaka System.Data.SqlClient

System.Data.SqlClient Pustaka adalah kumpulan jenis dan metode yang dapat Anda gunakan untuk menyambungkan ke database SQL Server yang berjalan di lokal atau di cloud pada SQL Database. Pustaka menyediakan antarmuka umum untuk mengambil dan memelihara data. Anda dapat menggunakan System.Data.SqlClient pustaka untuk menjalankan perintah Transact-SQL (T-SQL) dan operasi transaksional dan untuk mengambil data. Anda dapat membuat parameter operasi ini untuk menghindari masalah yang terkait dengan serangan injeksi SQL. Jika operasi gagal, System.Data.SqlClient pustaka menyediakan informasi kesalahan melalui pengecualian khusus dan kelas galat. Anda menangani pengecualian ini sama seperti jenis pengecualian lainnya dalam aplikasi .NET.

System.Data.SqlClient Pustaka tersedia dalam paket NuGet System.Data.SqlClient.

Hubungkan ke database tunggal

Anda menggunakan objek SqlConnection untuk membuat koneksi database. Anda memberikan string koneksi yang menentukan nama dan lokasi database, kredensial yang akan digunakan, dan parameter terkait koneksi lainnya. String koneksi biasa ke database tunggal terlihat seperti ini:

Server=tcp:myserver.database.windows.net,1433;Initial Catalog=mydatabase;Persist Security Info=False;User ID=myusername;Password=mypassword;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;

Anda dapat menemukan string koneksi untuk database tunggal Anda di halaman String koneksi untuk database Anda di portal Azure.

Contoh kode berikut menunjukkan cara membuat objek SqlConnection:

using System.Data.SqlClient;

...

string connectionString = "Server=tcp:myserver.database.windows.net,...";
SqlConnection con = new SqlConnection(connectionString);

Koneksi database tidak dibuat hingga Anda membuka koneksi. Anda biasanya membuka koneksi segera sebelum menjalankan perintah atau kueri T-SQL.

con.Open();

Beberapa database hanya mendukung sejumlah koneksi bersamaan yang terbatas. Jadi, setelah Anda selesai menjalankan perintah dan mengambil hasil apa pun, ada baiknya untuk menutup koneksi dan melepaskan sumber daya apa pun yang ditahan.

con.Close();

Pendekatan umum lainnya adalah membuat koneksi dalam using pernyataan. Strategi ini secara otomatis menutup koneksi ketika using pernyataan selesai. Tetapi Anda juga dapat memanggil Close metode secara eksplisit.

using (SqlConnection con = new SqlConnection(connectionString))
{
    // Open and Use the connection here
    con.Open();
    ...
}
// Connection is now closed

Menentukan perintah atau kueri T-SQL

Buat SqlCommand objek untuk menentukan perintah atau kueri T-SQL yang akan dijalankan. Contoh berikut menunjukkan pernyataan T-SQL DELETE yang menghapus baris untuk pelanggan tertentu dari dbo.Orders tabel. Anda dapat membuat parameter perintah. Contoh ini menggunakan parameter yang bernama CustID untuk nilai .CustomerID Baris yang mengatur CommandType properti SqlCommand objek untuk Text menunjukkan bahwa perintah adalah pernyataan T-SQL. Anda juga dapat menjalankan prosedur tersimpan daripada pernyataan T-SQL. Dalam hal ini, Anda mengatur CommandType ke StoredProcedure.

SqlCommand deleteOrdersForCustomer = new SqlCommand("DELETE FROM Orders WHERE CustomerID = @custID", con);
deleteOrdersForCustomer.CommandType = CommandType.Text;
string customerID = <prompt the user for a customer to delete>;
deleteOrdersForCustomer.Parameters.Add(new SqlParameter("custID", customerID));

Parameter terakhir untuk SqlCommand konstruktor dalam contoh ini adalah koneksi yang digunakan untuk menjalankan perintah.

Contoh berikutnya memperlihatkan kueri yang menggabungkan dbo.Customers tabel dan dbo.Orders bersama-sama untuk menghasilkan daftar nama pelanggan dan pesanannya.

SqlCommand queryCmd = new SqlCommand(
                    @"SELECT c.FirstName, c.LastName, o.OrderID
                      FROM Customers c JOIN Orders o
                      ON c.CustomerID = o.CustomerID", con);
queryCmd.CommandType = CommandType.Text;

Menjalankan perintah

Jika objek Anda SqlCommand mereferensikan pernyataan T-SQL yang tidak mengembalikan tataan hasil, jalankan perintah dengan menggunakan ExecuteNonQuery metode . Jika perintah berhasil, perintah mengembalikan jumlah baris yang terpengaruh oleh operasi. Contoh berikutnya menunjukkan cara menjalankan deleteOrdersForCustomer perintah yang ditampilkan sebelumnya.

int numDeleted = deleteOrdersForCustomer.ExecuteNonQuery();

Jika Anda mengharapkan perintah membutuhkan waktu beberapa saat untuk dijalankan, Anda dapat menggunakan ExecuteNonQueryAsync metode untuk melakukan operasi secara asinkron.

Jalankan kueri dan ambil data

Jika Anda SqlCommand berisi pernyataan T-SQL SELECT, Anda menjalankannya dengan menggunakan metode .ExecuteReader Metode ini mengembalikan SqlDataReader objek yang dapat Anda gunakan untuk mengulangi hasil dan memproses setiap baris secara bergantian. Anda mengambil data dari SqlReader objek dengan menggunakan Read metode. Metode ini mengembalikan benar jika baris ditemukan dan salah jika tidak ada baris tersisa untuk dibaca. Setelah baris dibaca, data untuk baris tersebut tersedia di bidang pada SqlReader objek. Setiap bidang memiliki nama yang sama dengan kolom terkait di pernyataan SELECT asli. Namun, data di setiap bidang diambil sebagai tak berjenis object, jadi Anda harus mengubahnya menjadi jenis yang sesuai sebelum Anda dapat menggunakannya. Kode berikut menunjukkan cara menjalankan queryCmd perintah yang kami ilustrasikan sebelumnya untuk mengambil data satu baris pada satu waktu.

SqlDataReader rdr = queryCmd.ExecuteReader();

// Read the data a row at a time
while (rdr.Read())
{
    string firstName = rdr["FirstName"].ToString();
    string lastName = rdr["LastName"].ToString();
    int orderID = Convert.ToInt32(rdr["OrderID"]);

    // Process the data
    ...
}

Tangani pengecualian dan kesalahan

Pengecualian dan kesalahan dapat terjadi karena berbagai alasan saat Anda menggunakan database. Misalnya, Anda mungkin mencoba mengakses tabel yang sudah tidak ada lagi. Anda dapat menangkap kesalahan T-SQL dengan menggunakan jenis .SqlException

Berbagai peristiwa atau masalah dalam database mungkin memicu pengecualian. Sebuah SqlException objek memiliki properti Errors yang berisi kumpulan SqlError objek. Objek ini memberikan detail untuk setiap kesalahan. Contoh berikut menunjukkan cara menangkap SqlException dan memproses kesalahan yang ada di dalamnya.

...
using (SqlConnection con = new SqlConnection(connectionString))
{
    SqlCommand command = new SqlCommand("DELETE FROM ...", con);
    try
    {
        con.Open();
        command.ExecuteNonQuery();
    }
    catch (SqlException ex)
    {
        for (int i = 0; i < ex.Errors.Count; i++)
        {
            Console.WriteLine($"Index # {i} Error: {ex.Errors[i].ToString()}");
        }
    }
}