Öğretici: Azure SQL veritabanı C# ve ADO.NET içinde tek bir veritabanında ilişkisel veritabanı tasarlamaTutorial: Design a relational database in a single database within Azure SQL Database C# and ADO.NET

Azure SQL veritabanı, Microsoft Bulut (Azure) içindeki ilişkisel bir hizmet olarak veritabanı (DBaaS).Azure SQL Database is a relational database-as-a-service (DBaaS) in the Microsoft Cloud (Azure). Bu öğreticide, Visual Studio ile ADO.NET ve Azure portalını kullanarak şu işlemleri gerçekleştirmeyi öğreneceksiniz:In this tutorial, you learn how to use the Azure portal and ADO.NET with Visual Studio to:

  • Azure portal * kullanarak tek bir veritabanı oluşturunCreate a single database using the Azure portal*
  • Azure portal kullanarak sunucu düzeyinde bir IP güvenlik duvarı kuralı ayarlamaSet up a server-level IP firewall rule using the Azure portal
  • ADO.NET ve Visual Studio ile veritabanına bağlanmaConnect to the database with ADO.NET and Visual Studio
  • ADO.NET ile tablo oluşturmaCreate tables with ADO.NET
  • ADO.NET ile veri ekleme, güncelleştirme ve silmeInsert, update, and delete data with ADO.NET
  • ADO.NET ile veri sorgulamaQuery data ADO.NET

* Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun .*If you don't have an Azure subscription, create a free account before you begin.

İpucu

Aşağıdaki Microsoft Learn modülü, basit bir veritabanının oluşturulması dahil olmak üzere Azure SQL veritabanını sorgulayan bir ASP.NET uygulamasının nasıl geliştirileceği ve yapılandırılacağıhakkında bilgi edinmenize yardımcı olur.The following Microsoft Learn module helps you learn for free how to Develop and configure an ASP.NET application that queries an Azure SQL Database, including the creation of a simple database.

ÖnkoşullarPrerequisites

Visual Studio 2019 veya sonraki bir sürümünü yükleme.An installation of Visual Studio 2019 or later.

Boş bir tek veritabanı oluşturmaCreate a blank single database

Azure SQL veritabanı 'nda tek bir veritabanı, tanımlı bir dizi işlem ve depolama kaynağı ile oluşturulur.A single database in Azure SQL Database is created with a defined set of compute and storage resources. Veritabanı bir Azure Kaynak grubu içinde oluşturulur ve veritabanı sunucusukullanılarak yönetilir.The database is created within an Azure resource group and is managed using an database server.

Boş tek veritabanı oluşturmak için bu adımları izleyin.Follow these steps to create a blank single database.

  1. Azure portalının sol üst köşesinde bulunan Kaynak oluştur öğesine tıklayın.Click Create a resource in the upper left-hand corner of the Azure portal.

  2. Yeni sayfasında, Azure Market bölümünde Veritabanları’nı seçin ve ardından Öne Çıkan bölümünde SQL Veritabanı’na tıklayın.On the New page, select Databases in the Azure Marketplace section, and then click SQL Database in the Featured section.

    create empty-database

  3. SQL veritabanı formunu, önceki görüntüde gösterildiği gibi aşağıdaki bilgilerle doldurun:Fill out the SQL Database form with the following information, as shown on the preceding image:

    AyarSetting       Önerilen değerSuggested value AçıklamaDescription
    Veritabanı adıDatabase name yourDatabaseyourDatabase Geçerli veritabanı adları için bkz. veritabanı tanımlayıcıları.For valid database names, see Database identifiers.
    AbonelikSubscription AboneliğinizyourSubscription Abonelikleriniz hakkında daha ayrıntılı bilgi için bkz. Abonelikler.For details about your subscriptions, see Subscriptions.
    Kaynak grubuResource group yourResourceGroupyourResourceGroup Geçerli kaynak grubu adları için bkz. Adlandırma kuralları ve kısıtlamalar.For valid resource group names, see Naming rules and restrictions.
    Kaynak seçmeSelect source Boş veritabanıBlank database Boş bir veritabanı oluşturulması gerektiğini belirtir.Specifies that a blank database should be created.
  4. Mevcut bir veritabanı sunucusunu kullanmak için sunucu ' ya tıklayın veya yeni bir veritabanı sunucusu oluşturun ve yapılandırın.Click Server to use an existing database server or create and configure a new database server. Mevcut bir sunucuyu seçin ya da Yeni sunucu oluştur ' a tıklayın ve Yeni sunucu formunu aşağıdaki bilgilerle doldurun:Either select an existing server or click Create a new server and fill out the New server form with the following information:

    AyarSetting       Önerilen değerSuggested value AçıklamaDescription
    Sunucu adıServer name Genel olarak benzersiz bir adAny globally unique name Geçerli sunucu adları için bkz. Adlandırma kuralları ve kısıtlamalar.For valid server names, see Naming rules and restrictions.
    Sunucu yöneticisi oturum açma bilgileriServer admin login Geçerli bir adAny valid name Geçerli oturum açma adları için bkz. veritabanı tanımlayıcıları.For valid login names, see Database identifiers.
    ParolaPassword Geçerli bir parolaAny valid password Parolanız en az sekiz karakter uzunluğunda olmalı ve şu kategorilerden üçünden karakter kullanmalıdır: büyük harf karakterler, küçük harf karakterler, sayılar ve alfasayısal olmayan karakterler.Your password must have at least eight characters and must use characters from three of the following categories: upper case characters, lower case characters, numbers, and non-alphanumeric characters.
    LocationLocation Geçerli bir konumAny valid location Bölgeler hakkında bilgi için bkz. Azure Bölgeleri.For information about regions, see Azure Regions.

    create database-server

  5. Tıklayın seçin.Click Select.

  6. Hizmet katmanını, DTU veya sanal çekirdek sayısını ve depolama alanı miktarını belirtmek için Fiyatlandırma katmanı’na tıklayın.Click Pricing tier to specify the service tier, the number of DTUs or vCores, and the amount of storage. Her hizmet katmanı için kullanılabilir DTU 'lar/sanal çekirdek sayısı ve depolama seçeneklerini keşfedebilirsiniz.You may explore the options for the number of DTUs/vCores and storage that is available to you for each service tier.

    Hizmet katmanını, DTU 'Lar veya sanal çekirdekler sayısını ve depolama alanı miktarını seçtikten sonra Uygula' ya tıklayın.After selecting the service tier, the number of DTUs or vCores, and the amount of storage, click Apply.

  7. Boş veritabanı için bir harmanlama girin (Bu öğretici için varsayılan değeri kullanın).Enter a Collation for the blank database (for this tutorial, use the default value). Harmanlamalar hakkında daha fazla bilgi için bkz. HarmanlamalarFor more information about collations, see Collations

  8. SQL veritabanı formunu tamamladığınıza göre, tek veritabanını sağlamak için Oluştur ' a tıklayın.Now that you've completed the SQL Database form, click Create to provision the single database. Bu adım birkaç dakika sürebilir.This step may take a few minutes.

  9. Araç çubuğunda Bildirimler’e tıklayarak dağıtım işlemini izleyin.On the toolbar, click Notifications to monitor the deployment process.

    bildirim

Sunucu düzeyinde IP güvenlik duvarı kuralı oluşturmaCreate a server-level IP firewall rule

SQL veritabanı hizmeti, sunucu düzeyinde bir IP güvenlik duvarı oluşturur.The SQL Database service creates an IP firewall at the server-level. Bu güvenlik duvarı, bir güvenlik duvarı kuralı tarafından IP 'nin güvenlik duvarından geçmesine izin verilmediği takdirde, dış uygulamaların ve araçların sunucuya ve sunucu üzerindeki veritabanlarına bağlanmasını engeller.This firewall prevents external applications and tools from connecting to the server and any databases on the server unless a firewall rule allows their IP through the firewall. Tek veritabanınızın dış bağlantısını etkinleştirmek için, önce IP adresiniz (veya IP adres aralığı) için bir IP güvenlik duvarı kuralı eklemeniz gerekir.To enable external connectivity to your single database, you must first add an IP firewall rule for your IP address (or IP address range). SQL veritabanı sunucu düzeyinde BIR IP güvenlik duvarı kuralıoluşturmak için bu adımları izleyin.Follow these steps to create a SQL Database server-level IP firewall rule.

Önemli

SQL veritabanı hizmeti 1433 bağlantı noktası üzerinden iletişim kurar.The SQL Database service communicates over port 1433. Bu hizmete bir kurumsal ağ içinden bağlanmaya çalışıyorsanız, ağınızın güvenlik duvarı tarafından 1433 numaralı bağlantı noktası üzerinden giden trafiğe izin verilmiyor olabilir.If you are trying to connect to this service from within a corporate network, outbound traffic over port 1433 may not be allowed by your network's firewall. Bu durumda, yöneticiniz 1433 numaralı bağlantı noktasını açmadığı takdirde tek veritabanınıza bağlanamazsınız.If so, you cannot connect to your single database unless your administrator opens port 1433.

  1. Dağıtım tamamlandıktan sonra, sol taraftaki menüden SQL veritabanları ' na ve ardından SQL veritabanları sayfasında YourDatabase ' e tıklayın.After the deployment completes, click SQL databases from the left-hand menu and then click yourDatabase on the SQL databases page. Veritabanınızın genel bakış sayfası açılır ve tam sunucu adı (örneğin, yourserver.Database.Windows.net) görüntülenerek daha fazla yapılandırma seçeneği sunulur.The overview page for your database opens, showing you the fully qualified Server name (such as yourserver.database.windows.net) and provides options for further configuration.

  2. Bu tam sunucu adını, SQL Server Management Studio sunucunuza ve veritabanlarına bağlanmak için kullanmak üzere kopyalayın.Copy this fully qualified server name for use to connect to your server and databases from SQL Server Management Studio.

    sunucu adı

  3. Araç çubuğunda Sunucu güvenlik duvarını ayarla’ya tıklayın.Click Set server firewall on the toolbar. SQL Veritabanı sunucusu için Güvenlik duvarı ayarları sayfası açılır.The Firewall settings page for the SQL Database server opens.

    Sunucu düzeyi IP güvenlik duvarı kuralı

  4. Geçerli IP adresinizi yeni bir IP güvenlik duvarı kuralına eklemek için araç çubuğunda istemci IP 'Si Ekle ' ye tıklayın.Click Add client IP on the toolbar to add your current IP address to a new IP firewall rule. Bir IP güvenlik duvarı kuralı, tek bir IP adresi veya IP adresi aralığı için 1433 bağlantı noktasını açabilir.An IP firewall rule can open port 1433 for a single IP address or a range of IP addresses.

  5. Kaydet’e tıklayın.Click Save. SQL veritabanı sunucusunda 1433 numaralı bağlantı noktasını açan geçerli IP adresiniz için sunucu düzeyinde bir IP güvenlik duvarı kuralı oluşturulur.A server-level IP firewall rule is created for your current IP address opening port 1433 on the SQL Database server.

  6. Tamam’a tıklayın ve sonra Güvenlik duvarı ayarları sayfasını kapatın.Click OK and then close the Firewall settings page.

IP adresiniz artık IP güvenlik duvarından geçebilirler.Your IP address can now pass through the IP firewall. Artık SQL Server Management Studio veya seçtiğiniz başka bir aracı kullanarak tek veritabanınıza bağlanabilirsiniz.You can now connect to your single database using SQL Server Management Studio or another tool of your choice. Daha önce oluşturduğunuz sunucu yöneticisi hesabını kullandığınızdan emin olun.Be sure to use the server admin account you created previously.

Önemli

Varsayılan olarak, SQL veritabanı IP güvenlik duvarı üzerinden erişim tüm Azure hizmetleri için etkinleştirilir.By default, access through the SQL Database IP firewall is enabled for all Azure services. Tüm Azure hizmetleri için devre dışı bırakmak isterseniz bu sayfadaki KAPALI öğesine tıklayın.Click OFF on this page to disable for all Azure services.

C#örnek programC# program example

Mevcut bu makalenin sonraki bölümlerinde bir C# Transact-SQL (T-SQL) deyimlerini SQL veritabanına göndermek için ADO.NET kullanan programı.The next sections of this article present a C# program that uses ADO.NET to send Transact-SQL (T-SQL) statements to the SQL database. C# Programı aşağıdaki eylemleri gösterir:The C# program demonstrates the following actions:

Varlık ilişkisi şeması (ERD)Entity Relationship Diagram (ERD)

CREATE TABLE Deyimleri içeren başvuruları oluşturmak için anahtar sözcüğü bir yabancı anahtar iki tablo arasında ilişki (FK).The CREATE TABLE statements involve the REFERENCES keyword to create a foreign key (FK) relationship between two tables. Kullanıyorsanız tempdb, açıklama --REFERENCES önünde çizgiler çifti kullanarak anahtar sözcüğü.If you're using tempdb, comment out the --REFERENCES keyword using a pair of leading dashes.

ERD iki tablo arasındaki ilişkiyi gösterir.The ERD displays the relationship between the two tables. Değerler tabEmployee.DepartmentCode alt sütun sınırlı değerleri için tabDepartment.DepartmentCode üstsütun.The values in the tabEmployee.DepartmentCode child column are limited to values from the tabDepartment.DepartmentCode parent column.

ERD gösteren yabancı anahtar

Not

Bir satır eklemek için T-SQL düzenleme seçeneğiniz # tablo adlarına oluşturan bunları gibi geçici tablolarda tempdb.You have the option of editing the T-SQL to add a leading # to the table names, which creates them as temporary tables in tempdb. Test veritabanı kullanılabilir olduğunda bu gösterim amaçları için yararlıdır.This is useful for demonstration purposes, when no test database is available. Yabancı anahtarlar herhangi bir başvuru, bunların kullanılması sırasında zorlanmaz ve program çalışmayı tamamladıktan sonra bağlantıyı kapatır, geçici tabloları otomatik olarak silinir.Any reference to foreign keys are not enforced during their use and temporary tables are deleted automatically when the connection closes after the program finishes running.

Derlemek ve çalıştırmak içinTo compile and run

C# Program mantıksal olarak bir .cs dosyası ve her blok anlamak daha kolay hale getirmek için bazı kod blokları şeklinde, fiziksel olarak ayrılmıştır.The C# program is logically one .cs file, and is physically divided into several code blocks, to make each block easier to understand. Derleme ve programı çalıştırmak için aşağıdaki adımları uygulayın:To compile and run the program, do the following steps:

  1. Oluşturma bir C# Visual Studio'da proje.Create a C# project in Visual Studio. Proje türü olmalıdır bir konsol, altında bulunan şablonları > Visual C# > WindowsMasaüstü > Konsol uygulaması (.NET Framework) .The project type should be a Console, found under Templates > Visual C# > Windows Desktop > Console App (.NET Framework).

  2. Dosyasındaki Program.cs, aşağıdaki adımlarla bulunan Başlangıç kod satırlarını değiştirin:In the file Program.cs, replace the starter lines of code with the following steps:

    1. Aşağıdaki kod blokları, bunların sunulur, aynı sırada Kopyala ve Yapıştır bkz veritabanına bağlan, oluşturmak T-SQL, ve veritabanı Gönder.Copy and paste the following code blocks, in the same sequence they're presented, see Connect to database, Generate T-SQL, and Submit to database.

    2. Aşağıdaki değerleri değiştirme Main yöntemi:Change the following values in the Main method:

      • Kal. Veri kaynağıcb.DataSource
      • cb.UserIDcb.UserID
      • Kal. Parolacb.Password
      • Kal. InitialCatalogcb.InitialCatalog
  3. Derleme doğrulama System.Data.dll başvurulur.Verify the assembly System.Data.dll is referenced. Doğrulamak için genişletme başvuruları düğümünde Çözüm Gezgini bölmesi.To verify, expand the References node in the Solution Explorer pane.

  4. Yapı ve Visual Studio'dan programı çalıştırmak için Başlat düğmesi.To build and run the program from Visual Studio, select the Start button. GUID değerleri, test çalışmaları arasında farklılık gösterir ancak rapor çıktısı bir program penceresinde görüntülenir.The report output is displayed in a program window, though GUID values will vary between test runs.

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

ADO.NET kullanarak SQL veritabanı'na bağlanmaConnect to SQL database using 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();
        }

T-SQL deyimleri döndüren yöntemlerMethods that return T-SQL statements

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 veritabanına göndermeSubmit T-SQL to the 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
}

Sonraki adımlarNext steps

Bu öğreticide, veritabanı ve tablo oluşturma, veritabanına bağlanma, verileri yükleme ve sorguları çalıştırma gibi temel veritabanı görevlerini öğrendiniz.In this tutorial, you learned basic database tasks such as create a database and tables, connect to the database, load data, and run queries. Şunları öğrendiniz:You learned how to:

  • Veritabanı oluşturmaCreate a database
  • Güvenlik duvarı kuralı ayarlamaSet up a firewall rule
  • Visual Studio ve C# ile veritabanına bağlanmaConnect to the database with Visual Studio and C#
  • Tablo oluşturmaCreate tables
  • Veri ekleme, güncelleştirme, silme ve sorgulamaInsert, update, delete, and query data

Veri geçişi hakkında bilgi edinmek için sonraki öğreticiye ilerleyin.Advance to the next tutorial to learn about data migration.