Sambungkan aplikasi ASP.NET ke Azure SQL Database
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()}");
}
}
}