Tutorial: Mendesain database hubungan di Azure SQL Database C# dan ADO.NET
Berlaku untuk: Azure SQL Database
Azure SQL Database adalah database relasional sebagai layanan (DBaaS) di Microsoft Cloud (Azure). Dalam tutorial ini, Anda mempelajari cara menggunakan portal Azure dan ADO.NET dengan Visual Studio untuk:
- Buat database tunggal menggunakan portal Microsoft Azure.
- Menyiapkan aturan firewall IP tingkat server menggunakan portal Microsoft Azure
- Menyambungkan ke database dengan ADO.NET dan Visual Studio
- Membuat tabel dengan ADO.NET
- Menyisipkan, memperbarui, dan menghapus data dengan ADO.NET
- Kueri data ADO.NET
Tip
Modul Learn gratis ini menunjukkan kepada Anda cara Mengembangkan dan mengonfigurasi aplikasi ASP.NET yang meminta Azure SQL Database, termasuk pembuatan database sederhana.
Prasyarat
- Instalasi Visual Studio 2019 atau yang lebih baru.
- Jika Anda tidak memiliki langganan Azure, buat akun gratis sebelum Anda memulai.
- Jika Anda belum membuat Azure SQL Database, kunjungi Mulai Cepat: Membuat database tunggal. Cari opsi untuk menggunakan penawaran Anda untuk mencoba Azure SQL Database secara gratis (pratinjau).
Masuk ke portal Microsoft Azure.
Masuk ke portal Azure.
Membuat aturan firewall tingkat server
SQL Database membuat firewall IP di tingkat server. Firewall ini mencegah aplikasi dan alat eksternal terhubung ke server dan database apa pun di server kecuali aturan firewall memungkinkan IP mereka melalui firewall. Untuk mengaktifkan konektivitas eksternal ke database Anda, Anda harus terlebih dahulu menambahkan aturan firewall IP untuk alamat IP Anda (atau rentang alamat IP). Ikuti langkah-langkah ini untuk membuat aturan firewall IP tingkat server.
Penting
SQL Database berkomunikasi melalui port 1433. Jika Anda mencoba menyambungkan ke layanan ini dari dalam jaringan perusahaan, lalu lintas keluar melalui port 1433 mungkin tidak diizinkan oleh firewall jaringan Anda. Jika demikian, Anda tidak bisa tersambung ke database Anda kecuali administrator Anda membuka port 1433.
Setelah penyebaran selesai, pilih database SQL dari menu sebelah kiri lalu pilih yourDatabase di halaman database SQL. Halaman gambaran umum untuk database Anda terbuka, memperlihatkan nama Serveryang sepenuhnya memenuhi syarat (seperti yourserver.database.windows.net) dan menyediakan opsi untuk konfigurasi lebih lanjut.
Salin nama server yang sepenuhnya memenuhi syarat ini yang digunakan untuk menyambungkan ke server dan database Anda dari SQL Server Management Studio.
Di portal Azure, navigasikan ke server SQL logis untuk Azure SQL Database Anda. Cara term mudah adalah memilih nilai Nama server pada halaman database SQL.
Di menu sumber daya, di bawah Pengaturan, pilih Jaringan.
Pilih tab Akses Publik, lalu pilih Jaringan yang dipilih di bawah Akses jaringan publik.
Gulir ke bawah ke bagian Aturan firewall.
Pilih Tambahkan alamat IPv4 klien Anda untuk menambahkan alamat IP Anda saat ini ke aturan firewall IP baru. Aturan firewall IP dapat membuka port 1433 untuk satu alamat IP atau rentang alamat IP.
Pilih Simpan. Aturan firewall IP tingkat server dibuat untuk port pembukaan alamat IP Anda saat ini 1433 di server.
Pilih OK lalu tutup halaman Pengaturan firewall.
Alamat IP Anda sekarang dapat melewati firewall IP. Sekarang Anda dapat tersambung ke database Anda menggunakan SQL Server Management Studio atau alat lain pilihan Anda. Pastikan untuk menggunakan akun admin server yang Anda buat sebelumnya.
Penting
Secara default, akses melalui firewall IP Database SQL diaktifkan untuk semua layanan Azure. Pilih NONAKTIF di halaman ini untuk menonaktifkan akses untuk semua layanan Azure.
Contoh program C#
Bagian selanjutnya dari artikel ini menyajikan program C# yang menggunakan ADO.NET untuk mengirim pernyataan Transact-SQL (T-SQL) ke SQL Database. Program C# menunjukkan tindakan berikut:
- Menyambungkan ke SQL Database menggunakan ADO.NET
- Metode yang mengembalikan pernyataan T-SQL
- Membuat tabel
- Mengisi tabel dengan data
- Memperbarui, menghapus, dan memilih data
- Mengirim T-SQL ke database
Diagram Hubungan Entitas (ERD)
Pernyataan CREATE TABLE
melibatkan kata kunci REFERENCES untuk membuat hubungan kunci asing (FK) di antara dua tabel. Jika Anda menggunakan tempdb, berikan komentar pada kata kunci --REFERENCES
menggunakan sepasang tanda hubung antar baris.
ERD menampilkan hubungan antara dua tabel. Nilai di kolom anak tabEmployee.DepartmentCode terbatas pada nilai dari kolom induk tabDepartment.DepartmentCode.
Catatan
Anda memiliki opsi untuk mengedit T-SQL untuk menambahkan #
antar baris ke nama tabel, yang membuatnya sebagai tabel sementara di tempdb. Ini berguna untuk tujuan demonstrasi, ketika tidak ada database pengujian yang tersedia. Setiap referensi ke kunci asing tidak diberlakukan selama penggunaannya dan tabel sementara dihapus secara otomatis ketika koneksi ditutup setelah program selesai berjalan.
Untuk mengompilasi dan menjalankan
Program C# secara logis adalah satu file .cs, dan secara fisik dibagi menjadi beberapa blok kode, untuk membuat setiap blok lebih mudah dipahami. Untuk mengompilasi dan menjalankan program, lakukan langkah-langkah berikut:
Buat proyek baru di Visual Studio Jenis proyek harus Konsol, ditemukan di Templat>Visual C#>Windows Desktop>Console App (.NET Framework).
Dalam file Program.cs, ganti baris kode permulaan dengan langkah-langkah berikut:
Salin dan tempel blok kode berikut ini, dalam urutan yang sama dengan yang disajikan, lihat Menyambungkan ke database, Menghasilkan T-SQL, dan Kirim ke database.
Ubah nilai berikut dalam metode
Main
:- cb.DataSource
- cb.UserID
- cb.Password
- cb.InitialCatalog
Pastikan perakitan System.Data.dll direferensikan. Untuk memverifikasi, perluas node Referensi di panel Penjelajah Solusi.
Untuk membangun dan menjalankan program dari Visual Studio, pilih tombol Mulai. Output laporan ditampilkan di jendela program, meskipun nilai GUID akan bervariasi di setiap uji coba.
================================= T-SQL to 2 - Create-Tables... -1 = rows affected. ================================= T-SQL to 3 - Inserts... 8 = rows affected. ================================= T-SQL to 4 - Update-Join... 2 = rows affected. ================================= T-SQL to 5 - Delete-Join... 2 = rows affected. ================================= Now, SelectEmployees (6)... 8ddeb8f5-9584-4afe-b7ef-d6bdca02bd35 , Alison , 20 , acct , Accounting 9ce11981-e674-42f7-928b-6cc004079b03 , Barbara , 17 , hres , Human Resources 315f5230-ec94-4edd-9b1c-dd45fbb61ee7 , Carol , 22 , acct , Accounting fcf4840a-8be3-43f7-a319-52304bf0f48d , Elle , 15 , NULL , NULL View the report output here, then press any key to end the program...
Menyambungkan ke SQL Database menggunakan ADO.NET
using System;
using System.Data.SqlClient; // System.Data.dll
//using System.Data; // For: SqlDbType , ParameterDirection
namespace csharp_db_test
{
class Program
{
static void Main(string[] args)
{
try
{
var cb = new SqlConnectionStringBuilder();
cb.DataSource = "your_server.database.windows.net";
cb.UserID = "your_user";
cb.Password = "your_password";
cb.InitialCatalog = "your_database";
using (var connection = new SqlConnection(cb.ConnectionString))
{
connection.Open();
Submit_Tsql_NonQuery(connection, "2 - Create-Tables", Build_2_Tsql_CreateTables());
Submit_Tsql_NonQuery(connection, "3 - Inserts", Build_3_Tsql_Inserts());
Submit_Tsql_NonQuery(connection, "4 - Update-Join", Build_4_Tsql_UpdateJoin(),
"@csharpParmDepartmentName", "Accounting");
Submit_Tsql_NonQuery(connection, "5 - Delete-Join", Build_5_Tsql_DeleteJoin(),
"@csharpParmDepartmentName", "Legal");
Submit_6_Tsql_SelectEmployees(connection);
}
}
catch (SqlException e)
{
Console.WriteLine(e.ToString());
}
Console.WriteLine("View the report output here, then press any key to end the program...");
Console.ReadKey();
}
Metode yang mengembalikan pernyataan T-SQL
static string Build_2_Tsql_CreateTables()
{
return @"
DROP TABLE IF EXISTS tabEmployee;
DROP TABLE IF EXISTS tabDepartment; -- Drop parent table last.
CREATE TABLE tabDepartment
(
DepartmentCode nchar(4) not null PRIMARY KEY,
DepartmentName nvarchar(128) not null
);
CREATE TABLE tabEmployee
(
EmployeeGuid uniqueIdentifier not null default NewId() PRIMARY KEY,
EmployeeName nvarchar(128) not null,
EmployeeLevel int not null,
DepartmentCode nchar(4) null
REFERENCES tabDepartment (DepartmentCode) -- (REFERENCES would be disallowed on temporary tables.)
);
";
}
static string Build_3_Tsql_Inserts()
{
return @"
-- The company has these departments.
INSERT INTO tabDepartment (DepartmentCode, DepartmentName)
VALUES
('acct', 'Accounting'),
('hres', 'Human Resources'),
('legl', 'Legal');
-- The company has these employees, each in one department.
INSERT INTO tabEmployee (EmployeeName, EmployeeLevel, DepartmentCode)
VALUES
('Alison' , 19, 'acct'),
('Barbara' , 17, 'hres'),
('Carol' , 21, 'acct'),
('Deborah' , 24, 'legl'),
('Elle' , 15, null);
";
}
static string Build_4_Tsql_UpdateJoin()
{
return @"
DECLARE @DName1 nvarchar(128) = @csharpParmDepartmentName; --'Accounting';
-- Promote everyone in one department (see @parm...).
UPDATE empl
SET
empl.EmployeeLevel += 1
FROM
tabEmployee as empl
INNER JOIN
tabDepartment as dept ON dept.DepartmentCode = empl.DepartmentCode
WHERE
dept.DepartmentName = @DName1;
";
}
static string Build_5_Tsql_DeleteJoin()
{
return @"
DECLARE @DName2 nvarchar(128);
SET @DName2 = @csharpParmDepartmentName; --'Legal';
-- Right size the Legal department.
DELETE empl
FROM
tabEmployee as empl
INNER JOIN
tabDepartment as dept ON dept.DepartmentCode = empl.DepartmentCode
WHERE
dept.DepartmentName = @DName2
-- Disband the Legal department.
DELETE tabDepartment
WHERE DepartmentName = @DName2;
";
}
static string Build_6_Tsql_SelectEmployees()
{
return @"
-- Look at all the final Employees.
SELECT
empl.EmployeeGuid,
empl.EmployeeName,
empl.EmployeeLevel,
empl.DepartmentCode,
dept.DepartmentName
FROM
tabEmployee as empl
LEFT OUTER JOIN
tabDepartment as dept ON dept.DepartmentCode = empl.DepartmentCode
ORDER BY
EmployeeName;
";
}
Mengirim T-SQL ke database
static void Submit_6_Tsql_SelectEmployees(SqlConnection connection)
{
Console.WriteLine();
Console.WriteLine("=================================");
Console.WriteLine("Now, SelectEmployees (6)...");
string tsql = Build_6_Tsql_SelectEmployees();
using (var command = new SqlCommand(tsql, connection))
{
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
Console.WriteLine("{0} , {1} , {2} , {3} , {4}",
reader.GetGuid(0),
reader.GetString(1),
reader.GetInt32(2),
(reader.IsDBNull(3)) ? "NULL" : reader.GetString(3),
(reader.IsDBNull(4)) ? "NULL" : reader.GetString(4));
}
}
}
}
static void Submit_Tsql_NonQuery(
SqlConnection connection,
string tsqlPurpose,
string tsqlSourceCode,
string parameterName = null,
string parameterValue = null
)
{
Console.WriteLine();
Console.WriteLine("=================================");
Console.WriteLine("T-SQL to {0}...", tsqlPurpose);
using (var command = new SqlCommand(tsqlSourceCode, connection))
{
if (parameterName != null)
{
command.Parameters.AddWithValue( // Or, use SqlParameter class.
parameterName,
parameterValue);
}
int rowsAffected = command.ExecuteNonQuery();
Console.WriteLine(rowsAffected + " = rows affected.");
}
}
} // EndOfClass
}
Tip
Untuk mempelajari selengkapnya tentang menulis kueri SQL, kunjungi Tutorial: Menulis pernyataan T-SQL.
Konten terkait
- Coba Azure SQL Database secara gratis (pratinjau)
- Apa yang baru di Azure SQL Database?
- Mengonfigurasi dan mengelola referensi konten - Azure SQL Database
- Merencanakan dan mengelola biaya untuk Azure SQL Database
Langkah selanjutnya
Lanjutkan ke tutorial berikutnya untuk mempelajari tentang migrasi data.