Zelfstudie: Een relationele database ontwerpen in Azure SQL Database C# en ADO.NET
VAN TOEPASSING OP:
Azure SQL Database
Azure SQL Database is een relationele DBaaS (database-as-a-service) in Microsoft Cloud (Azure). In deze zelfstudie leert u hoe u Azure Portal en ADO.NET met Visual Studio gebruikt voor de volgende taken:
- Een database maken met behulp van de Azure-portal
- Een IP-firewallregel op serverniveau instellen met de Azure-portal
- Verbinding maken met de database met ADO.NET en Visual Studio
- Tabellen maken met ADO.NET
- Gegevens invoegen, bijwerken en verwijderen met ADO.NET
- Querygegevens ADO.NET
*Als u nog geen abonnement op Azure hebt, maak dan een gratis account voordat u begint.
Tip
In de volgende Microsoft-leermodule leert u gratis Een ASP.NET-toepassing ontwikkelen en configureren die een query uitvoert op een Azure SQL Database, met inbegrip van het maken van een eenvoudige database.
Vereisten
Een installatie van Visual Studio 2019 of nieuwer.
Een lege database maken in Azure SQL Database
Een Azure SQL-database wordt gemaakt met een gedefinieerde set reken- en opslagresources. De database wordt gemaakt in een Azure-resourcegroep en wordt beheerd met een logische SQL-server.
Volg deze stappen om een lege database te maken.
Klik in de linkerbovenhoek van Azure Portal op Een resource maken.
Selecteer op de pagina Nieuw Databases in de sectie Azure Marketplace en klik vervolgens op SQL Database in de sectie Aanbevolen.

Vul het formulier SQL Database in met de volgende informatie, zoals in de voorgaande afbeelding wordt weergegeven:
Instelling Voorgestelde waarde Beschrijving Databasenaam yourDatabase Zie Database-id's voor geldige databasenamen. Abonnement yourSubscription Zie Abonnementen voor meer informatie over uw abonnementen. Resourcegroep yourResourceGroup Zie Naming conventions (Naamgevingsconventies) voor geldige resourcegroepnamen. Bron selecteren Lege database Hiermee geeft u aan dat er een lege database moet worden gemaakt. Klik op Server als u een bestaande server wilt gebruiken of een nieuwe server wilt maken en configureren. Selecteer een bestaande server of klik op Een nieuwe server maken en vul het formulier Nieuwe server in met de volgende gegevens:
Instelling Voorgestelde waarde Beschrijving Servernaam Een wereldwijd unieke naam Zie Naming conventions (Naamgevingsconventies) voor geldige servernamen. Aanmeldgegevens van serverbeheerder Een geldige naam Zie Database-id's voor geldige aanmeldingsnamen. Wachtwoord Een geldig wachtwoord Uw wachtwoord moet uit minstens acht tekens bestaan en moet tekens bevatten uit drie van de volgende categorieën: hoofdletters, kleine letters, cijfers en niet-alfanumerieke tekens. Locatie Een geldige locatie Zie Azure-regio's voor informatie over regio's. 
Klik op Selecteren.
Klik op Prijscategorie om de servicelaag, het aantal DTU's of vCores en de hoeveelheid opslag op te geven. U kunt de opties bekijken voor de hoeveelheid DTU's/vCores en opslag die voor elke servicelaag beschikbaar zijn.
Als u de servicelaag, het aantal DTU's of vCores en de hoeveelheid opslagruimte hebt geselecteerd, klikt u op Toepassen.
Voer een sortering in voor de lege database (gebruik de standaardwaarde in deze zelfstudie). Zie Collations (Sorteringen) voor meer informatie over sorteringen
Nu u het SQL Database-formulier hebt ingevuld, klikt u op Maken om de database in te richten. Deze stap kan enkele minuten duren.
Klik op de werkbalk op Meldingen om het implementatieproces te bewaken.

Een IP-firewallregel op serverniveau maken
SQL Database maakt een IP-firewall op serverniveau. De firewall voorkomt dat externe toepassingen en hulpprogramma's verbinding maken met de server of databases op de server, tenzij een firewallregel hun IP via de firewall toestaat. Als u externe connectiviteit voor uw database wilt inschakelen, moet u eerst een IP-firewallregel voor uw IP-adres (of IP-adresbereik) toevoegen. Volg deze stappen als u een IP-firewallregel op serverniveau wilt maken.
Belangrijk
SQL Database communiceert via poort 1433. Als u verbinding met deze service probeert te maken vanuit een bedrijfsnetwerk, wordt uitgaand verkeer via poort 1433 mogelijk niet toegestaan door de firewall van uw netwerk. In dat geval kunt u geen verbinding maken met uw database, tenzij de beheerder poort 1433 openstelt.
Wanneer de implementatie is voltooid, klikt u op SQL Databases in het menu aan de linkerkant. Klik vervolgens op de pagina SQL Databases op yourDatabase. De overzichtspagina voor de database wordt geopend, met de volledig gekwalificeerde servernaam (bijvoorbeeld yourserver.database.windows.net) en opties voor verdere configuratie.
Kopieer vanuit SQL Server Management Studio deze volledig gekwalificeerde servernaam om verbinding te maken met de server en de databases.

Klik op de werkbalk op Serverfirewall instellen. De pagina Firewallinstellingen voor de server wordt geopend.

Klik op IP van client toevoegen op de werkbalk om uw huidige IP-adres aan een nieuwe IP-firewallregel toe te voegen. Een IP-firewallregel kan poort 1433 openen voor een afzonderlijk IP-adres of voor een aantal IP-adressen.
Klik op Opslaan. Er wordt een IP-firewallregel op serverniveau gemaakt voor uw huidige IP-adres waarbij poort 1433 wordt geopend op de server.
Klik op OK en sluit de pagina Firewallinstellingen.
Uw IP-adres wordt niet meer geblokkeerd via de IP-firewall. U kunt nu verbinding maken met uw database met SQL Server Management Studio of een ander hulpprogramma naar keuze. Gebruik het beheerdersaccount voor de server dat u eerder hebt gemaakt.
Belangrijk
Voor alle Azure-services is toegang via de IP-firewall van SQL Database standaard ingeschakeld. Klik op UIT op deze pagina om toegang voor alle Azure-services uit te schakelen.
Voorbeeld van C#-programma
In de volgende secties van dit artikel wordt een C#-programma gepresenteerd dat gebruikmaakt van ADO.NET voor het verzenden van Transact-SQL-instructies (T-SQL) naar SQL Database. Met het C#-programma worden de volgende acties aangetoond:
- Verbinding maken met SQL Database met behulp van ADO.NET
- Methoden voor het retourneren van T-SQL-instructies
- Tabellen maken
- Tabellen vullen met gegevens
- Gegevens bijwerken, verwijderen en selecteren
- T-SQL indienen bij de database
ERD (diagram Relatie tussen eenheden)
Voor de CREATE TABLE-instructies is het trefwoord VERWIJZINGEN nodig voor het maken van een FK-relatie (refererende sleutel) tussen twee tabellen. Als u tempdb gebruikt, geeft u commentaar bij het trefwoord --REFERENCES met behulp van twee streepjes aan het begin.
Op de ERD wordt de relatie tussen de twee tabellen weergegeven. De waarden in de onderliggende kolom tabEmployee.DepartmentCode zijn beperkt tot de waarden in de bovenliggende kolom tabDepartment.Department.

Notitie
U kunt de T-SQL bewerken om een # toe te voegen vóór de tabelnamen. Hierdoor worden ze gemaakt als tijdelijke tabellen in tempdb. Dit is nuttig voor demonstratiedoeleinden, wanneer er geen testdatabase beschikbaar is. Er worden geen verwijzingen naar refererende sleutels afgedwongen wanneer deze worden gebruikt. Tijdelijke tabellen worden automatisch verwijderd wanneer de verbinding wordt verbroken zodra het programma is uitgevoerd.
Compileren en uitvoeren
Het C#-programma is logischerwijs één .cs-bestand en fysiek onderverdeeld in verschillende codeblokken, waardoor elk blok gemakkelijker te begrijpen is. Ga als volgt te werk om dit programma te compileren en uit te voeren:
Maak een C#-project in Visual Studio. Het projecttype moet Console zijn. U vindt dit onder Sjablonen > Visual C# > Windows Desktop > Console App (.NET Framework) .
In het bestand Program.cs vervangt u de beginregels van de code aan de hand van de volgende stappen:
Kopieer en plak de volgende codeblokken in de volgorde waarin ze worden gepresenteerd (zie Verbinding maken met de database, T-SQL genereren en Indienen bij database).
Wijzig de volgende waarden in de
Main-methode:- cb.DataSource
- cb.UserID
- cb.Password
- cb.InitialCatalog
Controleer of wordt verwezen naar de assembly System.Data.dll. Vouw in het deelvenster Solution Explorer het knooppunt Verwijzingen uit om dit te controleren.
Selecteer de knop Start om het programma te bouwen en uit te voeren in Visual Studio. De rapportuitvoer wordt in een programmavenster weergegeven, hoewel GUID-waarden tussen testuitvoeringen zullen variëren.
================================= 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...
Verbinding maken met SQL Database met behulp van 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();
}
Methoden voor het retourneren van T-SQL-instructies
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;
";
}
T-SQL indienen bij de 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
}
Volgende stappen
In deze zelfstudie hebt u kennisgemaakt met eenvoudige databasetaken, zoals het maken van een database en tabellen, het verbinden van de database, het laden van gegevens en het uitvoeren van query's. U hebt geleerd hoe u:
- Een database maken met behulp van de Azure-portal
- Een IP-firewallregel op serverniveau instellen met de Azure-portal
- Verbinding maken met de database met ADO.NET en Visual Studio
- Tabellen maken met ADO.NET
- Gegevens invoegen, bijwerken en verwijderen met ADO.NET
- Querygegevens ADO.NET
Ga naar de volgende zelfstudie voor meer informatie over gegevensmigratie.