kurz: návrh relační databáze v Azure SQL Database C# a ADO.NET

PLATÍ PRO: Azure SQL Database

Azure SQL Database je relační databáze jako služba (DBaaS) v Microsoft Cloud (Azure). V tomto kurzu zjistíte, jak pomocí webu Azure Portal a ADO.NET v sadě Visual Studio provádět následující úlohy:

  • Vytvoření databáze pomocí Azure Portal
  • Nastavení pravidla brány firewall protokolu IP na úrovni serveru pomocí Azure Portal
  • Připojit se k databázi pomocí ADO.NET a sady Visual Studio
  • Vytvářet tabulky pomocí ADO.NET
  • Vkládat, aktualizovat a odstraňovat data pomocí ADO.NET
  • Dotazovat data pomocí ADO.NET
  • Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet před tím, než začnete.

Tip

následující Microsoft Learn modul vám pomůže naučit se zdarma, jak vyvíjet a konfigurovat ASP.NET aplikaci, která se dotazuje na Azure SQL Database, včetně vytvoření jednoduché databáze.

Požadavky

instalace Visual Studio 2019 nebo novější.

Vytvoření prázdné databáze v Azure SQL Database

databáze v Azure SQL Database se vytvoří s definovanou sadou výpočetních prostředků a prostředků úložiště. databáze se vytvoří v rámci skupiny prostředků Azure a spravuje se pomocí logického serveru SQL.

Pomocí těchto kroků vytvořte prázdnou databázi.

  1. Klikněte na Vytvořit prostředek v levém horním rohu webu Azure Portal.

  2. Na stránce Nový v části Azure Marketplace vyberte Databases a potom klikněte v části Doporučené na SQL Database.

    Vytvoření prázdné databáze

  3. do formuláře SQL Database zadejte následující informace, jak je znázorněno na předchozím obrázku:

    Nastavení       Navrhovaná hodnota Popis 
    Název databáze yourDatabase Platné názvy databází najdete v tématu identifikátory databáze.
    Předplatné yourSubscription Podrobnosti o vašich předplatných najdete v tématu Předplatná.
    Skupina prostředků yourResourceGroup Platné názvy skupin prostředků najdete v tématu Pravidla a omezení pojmenování.
    Zvolit zdroj Prázdná databáze Určuje, že se má vytvořit prázdná databáze.
  4. Pokud chcete použít existující server nebo vytvořit a nakonfigurovat nový server, klikněte na Server . Buď vyberte existující server, nebo klikněte na vytvořit nový server a vyplňte formulář nového serveru pomocí následujících informací:

    Nastavení       Navrhovaná hodnota Popis 
    Název serveru Libovolný globálně jedinečný název Platné názvy serverů najdete v tématu Pravidla a omezení pojmenování.
    Přihlašovací jméno správce serveru Libovolné platné jméno Platná přihlašovací jména najdete v tématu identifikátory databáze.
    Heslo Libovolné platné heslo Heslo musí mít aspoň osm znaků a musí obsahovat znaky ze tří z těchto kategorií: velká písmena, malá písmena, číslice a jiné než alfanumerické znaky.
    Umístění Libovolné platné umístění Informace o oblastech najdete v tématu Oblasti služeb Azure.

    create database-server

  5. Klikněte na Vybrat.

  6. Klikněte na Cenová úroveň a zadejte úroveň služby, počet DTU nebo virtuálních jader a velikost úložiště. Můžete prozkoumat možnosti pro počet DTU/virtuální jádra a úložiště, které máte k dispozici pro jednotlivé úrovně služeb.

    Po výběru úrovně služby, počtu DTU nebo virtuální jádra a velikosti úložiště klikněte na použít.

  7. Zadejte kolaci pro prázdnou databázi (pro tento kurz použijte výchozí hodnotu). Další informace o kolacích najdete v tématu Kolace.

  8. teď, když jste dokončili formulář SQL Database , klikněte na vytvořit a zřiďte databázi. Tento krok může trvat několik minut.

  9. Na panelu nástrojů klikněte na Oznámení a sledujte proces nasazení.

    Snímek obrazovky zobrazuje oznámení v Azure Portal s probíhajícím nasazením.

Vytvoření pravidla brány firewall protokolu IP na úrovni serveru

SQL Database vytvoří bránu firewall protokolu IP na úrovni serveru. Tato brána firewall zabraňuje externím aplikacím a nástrojům v připojení k serveru a libovolné databázi na serveru, pokud pravidlo brány firewall nepovoluje jejich IP adresu přes bránu firewall. Pokud chcete povolit externí připojení k vaší databázi, musíte nejdřív přidat pravidlo brány firewall protokolu IP pro vaši IP adresu (nebo rozsah IP adres). Pomocí těchto kroků vytvořte pravidlo brány firewall protokolu IP na úrovni serveru.

Důležité

SQL Database komunikuje přes port 1433. Pokud se pokoušíte připojit k této službě v rámci podnikové sítě, nemusí být odchozí provoz přes port 1433 bránou firewall vaší sítě povolený. Pokud ano, nemůžete se připojit k databázi, pokud správce neotevře port 1433.

  1. po dokončení nasazení klikněte v nabídce vlevo na SQL databáze a pak na stránce databáze SQL klikněte na yourDatabase . Otevře se stránka s přehledem pro vaši databázi, na které se zobrazí plně kvalifikovaný název serveru (například yourserver.Database.Windows.NET), který poskytuje možnosti pro další konfiguraci.

  2. Zkopírujte tento plně kvalifikovaný název serveru, abyste ho mohli použít pro připojení k serveru a databázím z SQL Server Management Studio.

    název serveru

  3. Na panelu nástrojů klikněte na Nastavit bránu firewall serveru. Otevře se stránka nastavení brány firewall pro server.

    pravidlo brány firewall protokolu IP na úrovni serveru

  4. Kliknutím na Přidat IP adresu klienta na panelu nástrojů přidejte svoji aktuální IP adresu do nového pravidla brány firewall protokolu IP. Pravidlo brány firewall protokolu IP může otevřít port 1433 pro jednu IP adresu nebo rozsah IP adres.

  5. Klikněte na Uložit. Vytvoří se pravidlo brány firewall protokolu IP na úrovni serveru pro vaši aktuální IP adresu pro otevření portu 1433 na serveru.

  6. Klikněte na OK a pak zavřete stránku Nastavení brány firewall.

Vaše IP adresa teď může projít bránou firewall protokolu IP. nyní se můžete připojit k databázi pomocí SQL Server Management Studio nebo jiného nástroje podle vašeho výběru. Ujistěte se, že používáte účet správce serveru, který jste předtím vytvořili.

Důležité

ve výchozím nastavení je přístup prostřednictvím brány firewall SQL Database IP adres povolený pro všechny služby Azure. Kliknutím na vypnout na této stránce zakážete přístup pro všechny služby Azure.

Příklad programu C#

V dalších částech tohoto článku se nachází program v jazyce C#, který používá ADO.NET k posílání příkazů jazyka Transact-SQL (T-SQL) k SQL Database. Program C# předvádí následující akce:

Diagram vztahů mezi entitami (ERD)

CREATE TABLEPříkazy zahrnují klíčové slovo References k vytvoření vztahu cizího klíče (FK) mezi dvěma tabulkami. Pokud používáte databázi tempdb, přidejte komentář k --REFERENCES klíčovému slovu pomocí dvojice počátečních pomlček.

Záchranná disketa zobrazuje vztah mezi oběma tabulkami. Hodnoty v podřízeném sloupci tabEmployee. DepartmentCode jsou omezeny na hodnoty z nadřazeného sloupce tabDepartment. DepartmentCode .

Záchranná disketa ukazující cizí klíč

Poznámka

Máte možnost upravovat T-SQL, abyste přidali úvodní # název tabulky, který je vytvoří jako dočasné tabulky v databázi tempdb. To je užitečné pro demonstrační účely, pokud není k dispozici žádná testovací databáze. Všechny odkazy na cizí klíče se během jejich používání nevynutily a dočasné tabulky se odstraní automaticky, když se připojení ukončí po dokončení programu.

Pro zkompilování a spuštění

Program v jazyce C# je logicky jeden soubor. cs a fyzicky je rozdělen do několika bloků kódu, aby bylo snazší pochopit jednotlivé bloky. Chcete-li zkompilovat a spustit program, proveďte následující kroky:

  1. Vytvořte projekt C# v aplikaci Visual Studio. Typ projektu by měl být Konzola, která se nachází v části šablony > Visual C# > Windows Desktop > Konzolová aplikace (.NET Framework).

  2. V souboru program. cs nahraďte počáteční řádky kódu následujícím postupem:

    1. Zkopírujte a vložte následující bloky kódu ve stejném pořadí, v jakém jsou prezentovány, viz připojení k databázi, generování T-SQLa odeslání do databáze.

    2. Změňte následující hodnoty v Main metodě:

      • CB. Datového
      • CB. UserID
      • CB. Zadáno
      • cb.InitialCatalog
  3. Ověřte, že je odkazováno na System.Data.dll sestavení. Chcete-li ověřit, rozbalte uzel odkazy v podokně Průzkumník řešení .

  4. Chcete-li vytvořit a spustit program ze sady Visual Studio, vyberte tlačítko Start . Výstup sestavy se zobrazí v okně programu, i když se hodnoty GUID mezi testovacími běhy budou lišit.

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

Připojení k SQL Database pomocí 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, které vracejí příkazy 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;
    ";
}

Odeslat T-SQL do databáze

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
}

Další kroky

V tomto kurzu jste se naučili základní databázové úlohy, jako je například vytvoření databáze a tabulek, připojení k databázi, načtení dat a spuštění dotazů. Naučili jste se:

  • Vytvoření databáze pomocí Azure Portal
  • Nastavení pravidla brány firewall protokolu IP na úrovni serveru pomocí Azure Portal
  • Připojit se k databázi pomocí ADO.NET a sady Visual Studio
  • Vytvářet tabulky pomocí ADO.NET
  • Vkládat, aktualizovat a odstraňovat data pomocí ADO.NET
  • Dotazovat data pomocí ADO.NET

Přejděte k dalšímu kurzu, kde se dozvíte o migraci dat.