Öğretici: Azure SQL Veritabanı C# ve ADO.NET ilişkisel veritabanı tasarlama

Şunlar için geçerlidir: Azure SQL Veritabanı

Azure SQL Veritabanı, Microsoft Bulutunda (Azure) ilişkisel bir hizmet olarak veritabanıdır (DBaaS). Bu öğreticide, Visual Studio ile ADO.NET ve Azure portalını kullanarak şu işlemleri gerçekleştirmeyi öğreneceksiniz:

  • Azure portal kullanarak veritabanı oluşturma
  • Azure portal kullanarak sunucu düzeyinde IP güvenlik duvarı kuralı ayarlama
  • ADO.NET ve Visual Studio ile veritabanına bağlanma
  • ADO.NET ile tablo oluşturma
  • ADO.NET ile veri ekleme, güncelleştirme ve silme
  • ADO.NET ile veri sorgulama

*Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun .

İpucu

Bu ücretsiz Learn modülü, basit bir veritabanı oluşturma dahil olmak üzere bir Azure SQL Veritabanını sorgulayan bir ASP.NET uygulaması geliştirmeyi ve yapılandırmayı gösterir.

Ön koşullar

Visual Studio 2019 veya sonraki bir sürümün yüklemesi.

Azure SQL Veritabanında boş veritabanı oluşturma

Azure SQL Veritabanı'nda tanımlı bir işlem ve depolama kaynakları kümesiyle bir veritabanı oluşturulur. Veritabanı bir Azure kaynak grubu içinde oluşturulur ve mantıksal SQL sunucusu kullanılarak yönetilir.

Boş bir veritabanı oluşturmak için bu adımları izleyin.

  1. Azure portalının sol üst köşesinde bulunan Kaynak oluştur öğesini seçin.

  2. Yeni sayfasında, Azure Market bölümünde Veritabanları'nı seçin ve ardından Öne Çıkanlarbölümünden SQL Veritabanı seçin.

    Azure Market SQL Veritabanı seçerek Azure portal ekran görüntüsü.

  3. SQL Veritabanı formunu, önceki görüntüde gösterildiği gibi aşağıdaki bilgilerle doldurun:

    Ayar Önerilen değer Açıklama
    Veritabanı adı yourDatabase Geçerli veritabanı adları için bkz. Veritabanı tanımlayıcıları.
    Abonelik yourSubscription Abonelikleriniz hakkında daha ayrıntılı bilgi için bkz. Abonelikler.
    Kaynak grubu yourResourceGroup Geçerli kaynak grubu adları için bkz. Adlandırma kuralları ve kısıtlamalar.
    Kaynak seçme Boş veritabanı Boş bir veritabanı oluşturulması gerektiğini belirtir.
  4. Mevcut bir sunucuyu kullanmak veya yeni bir sunucu oluşturup yapılandırmak için Sunucu'yu seçin. Var olan bir sunucuyu seçin veya Yeni sunucu oluştur'u seçin ve Yeni sunucu formunu aşağıdaki bilgilerle doldurun:

    Ayar Önerilen değer Açıklama
    Sunucu adı Genel olarak benzersiz bir ad Geçerli sunucu adları için bkz. Adlandırma kuralları ve kısıtlamalar.
    Sunucu yöneticisi oturum açma bilgileri Geçerli bir ad Geçerli oturum açma adları için bkz . Veritabanı tanımlayıcıları.
    Parola Geçerli bir parola Parolanızın en az sekiz karakteri olmalı ve şu kategorilerden üçünün karakterlerini kullanmalıdır: büyük harf karakterler, küçük harfler, sayılar ve alfasayısal olmayan karakterler.
    Konum Geçerli bir konum Bölgeler hakkında bilgi için bkz. Azure Bölgeleri.

    Azure dağıtım sayfasının mantıksal sunucusunu gösteren Azure portal ekran görüntüsü.

  5. Seç’i seçin.

  6. Hizmet katmanını , DTU veya sanal çekirdek sayısını ve depolama miktarını belirtmek için Fiyatlandırma katmanı'nı seçin. Her hizmet katmanı için kullanabileceğiniz DTU/sanal çekirdek sayısı ve depolama alanı seçeneklerini keşfedebilirsiniz.

    Hizmet katmanını, DTU'ların veya sanal çekirdeklerin sayısını ve depolama alanı miktarını seçtikten sonra Uygula'yı seçin.

  7. Boş veritabanı için bir Harmanlama girin (bu öğretici için varsayılan değeri kullanın). Harmanlamalar hakkında daha fazla bilgi için bkz. Harmanlamalar

  8. SQL Veritabanı formunu tamamladığınıza göre veritabanını sağlamak için Oluştur'u seçin. Bu adım birkaç dakika sürebilir.

  9. Araç çubuğunda Bildirimler’i seçerek dağıtım işlemini izleyin.

    Dağıtım devam ederken Azure portal Bildirimleri gösteren ekran görüntüsü.

Sunucu düzeyinde IP güvenlik duvarı kuralı oluşturma

SQL Veritabanı sunucu düzeyinde bir IP güvenlik duvarı oluşturur. Bu güvenlik duvarı, bir güvenlik duvarı kuralı güvenlik duvarı üzerinden IP'lerine izin vermediği sürece dış uygulamaların ve araçların sunucuya ve sunucudaki veritabanlarına bağlanmasını engeller. Veritabanınıza dış bağlantıyı etkinleştirmek için önce IP adresiniz (veya IP adresi aralığı) için bir IP güvenlik duvarı kuralı eklemeniz gerekir. Sunucu düzeyinde IP güvenlik duvarı kuralı oluşturmak için bu adımları izleyin.

Önemli

SQL Veritabanı 1433 numaralı bağlantı noktası üzerinden iletişim kurar. Şirket ağı içinden bu hizmete 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. Bu durumda, yöneticiniz 1433 numaralı bağlantı noktasını açmadığı sürece veritabanınıza bağlanamazsınız.

  1. Dağıtım tamamlandıktan sonra sol taraftaki menüden SQL veritabanları'nı ve ardından SQL veritabanları sayfasında Veritabanınızı seçin. Veritabanınızın genel bakış sayfası açılır ve size tam Sunucu adını ( yourserver.database.windows.net gibi) gösterir ve daha fazla yapılandırma seçeneği sağlar.

  2. SQL Server Management Studio sunucunuza ve veritabanlarınıza bağlanmak için bu tam sunucu adını kopyalayın.

    Sunucu adının vurgulandığı Azure portal, veritabanına genel bakış sayfasının ekran görüntüsü.

  3. Ayarlar'ın altında Ağ'ı seçin. Genel Erişim sekmesini seçin ve güvenlik duvarı kuralları bölümünü görüntülemek için Genel ağ erişimi'nin altında Seçili ağlar'ı seçin.

    Sunucu düzeyinde IP güvenlik duvarı kuralının nerede ayarlandığını gösteren Azure portal ağ sayfasının ekran görüntüsü.

  4. Geçerli IP adresinizi yeni bir IP güvenlik duvarı kuralına eklemek için araç çubuğunda İstemci IP'sini ekle'yi seçin. IP güvenlik duvarı kuralı, tek bir IP adresi veya ip adresi aralığı için 1433 numaralı bağlantı noktasını açabilir.

  5. Kaydet’i seçin. Sunucuda 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.

  6. Tamam'ı seçin ve güvenlik duvarı ayarları sayfasını kapatın.

IP adresiniz artık IP güvenlik duvarından geçebilir. Artık SQL Server Management Studio veya seçtiğiniz başka bir aracı kullanarak veritabanınıza bağlanabilirsiniz. Daha önce oluşturduğunuz sunucu yöneticisi hesabını kullandığınızdan emin olun.

Önemli

Varsayılan olarak, SQL Veritabanı IP güvenlik duvarı üzerinden erişim tüm Azure hizmetleri için etkinleştirilir. Tüm Azure hizmetlerine erişimi devre dışı bırakmak için bu sayfada KAPALI'yi seçin.

C# programı örneği

Bu makalenin sonraki bölümlerinde, transact-SQL (T-SQL) deyimlerini SQL Veritabanı göndermek için ADO.NET kullanan bir C# programı bulunur. C# programı aşağıdaki eylemleri gösterir:

Varlık İlişkisi Diyagramı (ERD)

deyimleri, CREATE TABLE iki tablo arasında yabancı anahtar (FK) ilişkisi oluşturmak için REFERENCES anahtar sözcüğünü içerir. tempdb kullanıyorsanız, baştaki tire çiftini --REFERENCES kullanarak anahtar sözcüğü açıklama satırı yapın.

HATAİşLEV, iki tablo arasındaki ilişkiyi görüntüler. tabEmployee.DepartmentCodealt sütunundaki değerler tabDepartment.DepartmentCodeüst sütunundaki değerlerle sınırlıdır.

Yabancı anahtarı gösteren HATAİşLEV

Not

Tablo adlarına bir öncü # eklemek için T-SQL'i düzenleme seçeneğiniz vardır ve bu da bunları tempdb'de geçici tablolar olarak oluşturur. Bu, kullanılabilir test veritabanı olmadığında gösterim amacıyla kullanışlıdır. Yabancı anahtarlara yapılan başvurular, kullanımları sırasında uygulanmaz ve program çalışmaya başladığında bağlantı kapandığında geçici tablolar otomatik olarak silinir.

Derlemek ve çalıştırmak için

C# programı mantıksal olarak bir .cs dosyasıdır ve her bloğun anlaşılmasını kolaylaştırmak için fiziksel olarak birkaç kod bloğuna ayrılmıştır. Programı derlemek ve çalıştırmak için aşağıdaki adımları uygulayın:

  1. Visual Studio'da bir C# projesi oluşturun. Proje türü, Şablonlar>Visual C#>Windows Masaüstü>Konsol Uygulaması (.NET Framework) altında bulunan bir Konsol olmalıdır.

  2. Program.cs dosyasında, kodun başlangıç satırlarını aşağıdaki adımlarla değiştirin:

    1. Aşağıdaki kod bloklarını kopyalayıp yapıştırın; sunulan sırayla bkz. Veritabanına bağlanma, T-SQL Oluşturma ve Veritabanına gönderme.

    2. yönteminde Main aşağıdaki değerleri değiştirin:

      • Cb. Datasource
      • Cb. Userıd
      • Cb. Parola
      • Cb. InitialCatalog
  3. Derleme System.Data.dll başvuruldığını doğrulayın. Doğrulamak için Çözüm Gezgini bölmesindeki Başvurular düğümünü genişletin.

  4. Visual Studio'dan programı derlemek ve çalıştırmak için Başlangıç düğmesini seçin. Rapor çıkışı bir program penceresinde görüntülenir, ancak GUID değerleri test çalıştırmaları arasında farklılık gösterir.

    =================================
    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ı bağlanma

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öntemler

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;
    ";
}

Veritabanına T-SQL gönderme

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ımlar

Bu öğreticide veritabanı ve tablo oluşturma, veritabanına bağlanma, veri yükleme ve sorgu çalıştırma gibi temel veritabanı görevlerini öğrendiniz. Şunları öğrendiniz:

  • Azure portal kullanarak veritabanı oluşturma
  • Azure portal kullanarak sunucu düzeyinde IP güvenlik duvarı kuralı ayarlama
  • ADO.NET ve Visual Studio ile veritabanına bağlanma
  • ADO.NET ile tablo oluşturma
  • ADO.NET ile veri ekleme, güncelleştirme ve silme
  • ADO.NET ile veri sorgulama

Veri geçişi hakkında bilgi edinmek için sonraki öğreticiye ilerleyin.