Samouczek: projektowanie relacyjnej bazy danych w usłudze Azure SQL Database w języku C# i ADO.NET
Dotyczy:Azure SQL Database
Usługa Azure SQL Database to relacyjna baza danych oferowana jako usługa (DBaaS, database-as-a service) na platformie Microsoft Cloud (Azure). Z tego samouczka dowiesz się, jak przy użyciu witryny Azure Portal i narzędzia ADO.NET w programie Visual Studio wykonać następujące czynności:
- Tworzenie bazy danych przy użyciu witryny Azure Portal
- Konfigurowanie reguły zapory bazującej na adresach IP na poziomie serwera za pomocą witryny Azure Portal
- Nawiązywanie połączenia z bazą danych przy użyciu narzędzia ADO.NET i programu Visual Studio
- Tworzenie tabel za pomocą narzędzia ADO.NET
- Wstawianie, aktualizowanie i usuwanie danych za pomocą narzędzia ADO.NET
- Wykonywanie zapytań względem danych za pomocą narzędzia ADO.NET
Napiwek
W tym bezpłatnym module Learn pokazano, jak opracowywać i konfigurować aplikację ASP.NET, która wysyła zapytania do usługi Azure SQL Database, w tym tworzenie prostej bazy danych.
Wymagania wstępne
- Instalacja programu Visual Studio 2019 lub nowszego.
- Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.
- Jeśli nie masz jeszcze utworzonej bazy danych Azure SQL Database, odwiedź stronę Szybki start: tworzenie pojedynczej bazy danych. Poszukaj opcji skorzystania z oferty, aby bezpłatnie wdrożyć Azure SQL Database.
Zaloguj się do witryny Azure Portal.
Zaloguj się w witrynie Azure Portal.
Tworzenie reguły zapory bazującej na adresach IP na poziomie serwera
Usługa SQL Database tworzy zaporę ip na poziomie serwera. Ta zapora uniemożliwia zewnętrznym aplikacjom i narzędziom łączenie się z serwerem i wszelkimi bazami danych na tym serwerze, chyba że reguła zapory zezwala na przechodzenie ruchu z ich adresów IP przez zaporę. Aby włączyć łączność zewnętrzną z bazą danych, musisz najpierw dodać regułę zapory ip dla adresu IP (lub zakresu adresów IP). Wykonaj następujące kroki, aby utworzyć regułę zapory adresów IP na poziomie serwera.
Ważne
Usługa SQL Database nawiązuje komunikację na porcie 1433. Jeśli próbujesz nawiązać połączenie z tą usługą z sieci firmowej, ruch wychodzący przez port 1433 może nie być dozwolony przez zaporę sieci. Jeśli tak, nie możesz nawiązać połączenia z bazą danych, chyba że administrator otworzy port 1433.
Po zakończeniu wdrażania wybierz pozycję Bazy danych SQL z menu po lewej stronie, a następnie wybierz bazę danych Nastronie Bazy danychSQL. Zostanie otwarta strona przeglądu bazy danych zawierająca w pełni kwalifikowaną nazwę serwera (na przykład yourserver.database.windows.net) i opcje dalszej konfiguracji.
Skopiuj tę w pełni kwalifikowaną nazwę serwera w celu nawiązania połączenia z serwerem i bazami danych w programie SQL Server Management Studio.
W witrynie Azure Portal przejdź do logicznego serwera SQL dla usługi Azure SQL Database. Najprostszym sposobem jest wybranie wartości Nazwa serwera na stronie bazy danych SQL.
W menu zasobów w obszarze Ustawienia wybierz pozycję Sieć.
Wybierz kartę Dostęp publiczny, a następnie wybierz pozycję Wybrane sieci w obszarze Dostęp do sieci publicznej.
Przewiń w dół do sekcji Reguły zapory.
Wybierz pozycję Dodaj adres IPv4 klienta, aby dodać bieżący adres IP do nowej reguły zapory adresów IP. Reguła zapory bazująca na adresach IP może otworzyć port 1433 dla pojedynczego adresu IP lub zakresu adresów IP.
Wybierz pozycję Zapisz. Reguła zapory adresów IP na poziomie serwera jest tworzona dla bieżącego adresu IP otwierającego port 1433 na serwerze.
Wybierz przycisk OK, a następnie zamknij stronę Ustawienia zapory.
Adres IP może teraz być przekazywany przez zaporę IP. Teraz możesz nawiązać połączenie z bazą danych przy użyciu programu SQL Server Management Studio lub innego wybranego narzędzia. Używaj wcześniej utworzonego konta administratora serwera.
Ważne
Domyślnie dostęp przez zaporę IP usługi SQL Database jest włączony dla wszystkich usług platformy Azure. Wybierz pozycję WYŁ. na tej stronie, aby wyłączyć dostęp dla wszystkich usług platformy Azure.
Przykład programu w języku C#
W następnych sekcjach tego artykułu przedstawiono program języka C#, który używa ADO.NET do wysyłania instrukcji języka Transact-SQL (T-SQL) do usługi SQL Database. Program w języku C# prezentuje następujące akcje:
- Nawiązywanie połączenia z usługą SQL Database przy użyciu ADO.NET
-
Metody, które zwracają instrukcje języka T-SQL
- Utwórz tabele
- Wypełnianie tabel danymi
- Aktualizowanie, usuwanie i wybieranie danych
- Przesyłanie kodu języka T-SQL do bazy danych
Diagram relacji jednostek
Wcześniejsze instrukcje CREATE TABLE
zawierają słowo kluczowe REFERENCES w celu utworzenia relacji między dwiema tabelami za pomocą klucza obcego. Jeśli używasz bazy danych tempdb, wykomentuj słowo kluczowe --REFERENCES
, wpisując na początku dwa łączniki.
Ten diagram relacji jednostek przedstawia relację między dwiema tabelami. Wartości w kolumnie podrzędnej tabEmployee.DepartmentCode są ograniczone do wartości z kolumny nadrzędnejtabDepartment.DepartmentCode.
Uwaga
Istnieje możliwość edytowania kodu w języku T-SQL w celu dodania znaku #
na początku nazw tabel, co powoduje ich utworzenie jako tabel tymczasowych w bazie danych tempdb. Jest to przydatne dla celów demonstracyjnych, gdy nie jest dostępna testowa baza danych. Podczas ich używania nie są wymuszane żadne odwołania do kluczy obcych. Ponadto tabele tymczasowe są usuwane automatycznie, gdy połączenie zostanie zamknięte po zakończeniu działania programu.
Kompilowanie i uruchamianie
Program w języku C# jest logicznie jednym plikiem cs, ale fizycznie jest podzielony na kilka bloków kodu, aby poprawić czytelność. Aby skompilować i uruchomić program, wykonaj następujące czynności:
Utwórz projekt w języku C# w programie Visual Studio. Typ projektu powinien mieć wartość Konsola, którą można znaleźć w obszarze Szablony>Visual C#>Aplikacja klasyczna systemu Windows>Aplikacja konsoli (.NET Framework).
W pliku Program.cs zamień startowe wiersze kodu, wykonując następujące czynności:
Skopiuj i wklej poniższe bloki kodu w tej samej kolejności, w której są zaprezentowane, zobacz sekcje Połączenie z bazą danych, Generowanie kodu języka T-SQL i Przesyłanie do bazy danych.
Zmień następujące wartości w metodzie
Main
:- cb.DataSource
- cb.UserID
- cb.Password
- cb.InitialCatalog
Upewnij się, że przywoływany jest zestaw System.Data.dll. Aby to sprawdzić, rozwiń węzeł Odwołania w okienku Eksplorator rozwiązań.
Aby skompilować i uruchomić program z poziomu programu Visual Studio, kliknij przycisk Uruchom. Dane wyjściowe raportu są wyświetlane w oknie programu, a wartości identyfikatora GUID będą różnić się w różnych przebiegach testu.
================================= 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...
Nawiązywanie połączenia z usługą SQL Database przy użyciu 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();
}
Metody, które zwracają instrukcje języka 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;
";
}
Przesyłanie kodu języka T-SQL do bazy danych
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
}
Napiwek
Aby dowiedzieć się więcej na temat pisania zapytań SQL, odwiedź stronę Samouczek: pisanie instrukcji języka Transact-SQL.
Powiązana zawartość
- wdrażanie usługi Azure SQL Database bezpłatnie
- Co nowego w usłudze Azure SQL Database?
- Konfigurowanie dokumentacji zawartości i zarządzanie nią — Azure SQL Database
- Planowanie kosztów i zarządzanie nimi dla usługi Azure SQL Database
Następny krok
Przejdź do następnego samouczka, aby dowiedzieć się więcej o migracji danych.