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.

  1. Klik in de linkerbovenhoek van Azure Portal op Een resource maken.

  2. Selecteer op de pagina Nieuw Databases in de sectie Azure Marketplace en klik vervolgens op SQL Database in de sectie Aanbevolen.

    lege database maken

  3. 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.
  4. 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.

    database-server maken

  5. Klik op Selecteren.

  6. 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.

  7. Voer een sortering in voor de lege database (gebruik de standaardwaarde in deze zelfstudie). Zie Collations (Sorteringen) voor meer informatie over sorteringen

  8. Nu u het SQL Database-formulier hebt ingevuld, klikt u op Maken om de database in te richten. Deze stap kan enkele minuten duren.

  9. Klik op de werkbalk op Meldingen om het implementatieproces te bewaken.

    Schermopname van Meldingen in Azure Portal met De implementatie wordt uitgevoerd.

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.

  1. 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.

  2. Kopieer vanuit SQL Server Management Studio deze volledig gekwalificeerde servernaam om verbinding te maken met de server en de databases.

    servernaam

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

    IP-firewallregel op serverniveau

  4. 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.

  5. Klik op Opslaan. Er wordt een IP-firewallregel op serverniveau gemaakt voor uw huidige IP-adres waarbij poort 1433 wordt geopend op de server.

  6. 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:

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.

ERD met refererende sleutel

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:

  1. 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) .

  2. In het bestand Program.cs vervangt u de beginregels van de code aan de hand van de volgende stappen:

    1. 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).

    2. Wijzig de volgende waarden in de Main-methode:

      • cb.DataSource
      • cb.UserID
      • cb.Password
      • cb.InitialCatalog
  3. Controleer of wordt verwezen naar de assembly System.Data.dll. Vouw in het deelvenster Solution Explorer het knooppunt Verwijzingen uit om dit te controleren.

  4. 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.