Öğretici: Azure SQL Veritabanı C# ve ADO.NET
ŞUNUN İÇİN GEÇERLİDİR:
Azure SQL Database
Azure SQL Veritabanı, Microsoft Bulut'ta (Azure) bir hizmet olarak ilişkisel veritabanıdır (DBaaS). Bu öğreticide, Visual Studio ile ADO.NET ve Azure portalını kullanarak şu işlemleri gerçekleştirmeyi öğreneceksiniz:
- veritabanını kullanarak veritabanı Azure portal
- Güvenlik duvarını kullanarak sunucu düzeyinde IP güvenlik duvarı Azure portal
- 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
Aşağıdaki Microsoft Learn modülü, basit bir veritabanı oluşturma dahil olmak üzere bir Azure SQL Veritabanı sorguleyen bir ASP.NETuygulaması geliştirmeyi ve yapılandırmayı ücretsiz olarak öğrenmenıza yardımcı olur.
Önkoşullar
Visual Studio 2019 veya sonraki bir yüklemesi.
Azure SQL Veritabanı'de boş veritabanı oluşturma
Azure SQL Veritabanı veritabanı, tanımlı bir dizi işlem ve depolama kaynağı ile oluşturulur. Veritabanı bir Azure kaynak grubu içinde oluşturulur ve mantıksal bir sunucu kullanılarak SQL yönetilir.
Boş bir veritabanı oluşturmak için bu adımları izleyin.
Azure portalının sol üst köşesinde bulunan Kaynak oluştur öğesine tıklayın.
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.

Aşağıdaki SQL Veritabanı yukarıdaki 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. Var olan bir sunucuyu kullanmak veya yeni bir sunucu oluşturmak ve yapılandırmak için Sunucu'ya tıklayın. Mevcut bir sunucuyu seçin veya Yeni sunucu oluştur'a tıklayın 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 en az sekiz karakterden olmalı ve şu kategorilerin üçünden karakterler kullanmalıdır: büyük harf karakterler, küçük harf karakterler, sayılar ve alfasayısal olmayan karakterler. Konum Geçerli bir konum Bölgeler hakkında bilgi için bkz. Azure Bölgeleri. 
Seç’e tıklayın.
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. Her hizmet katmanı için kullanılabilen DTUR/sanal çekirdek sayısı ve depolama alanı seçeneklerini keşfedebilirsiniz.
Hizmet katmanını, DTUS veya sanal çekirdek sayısını ve depolama alanını seçerek Uygula'ya tıklayın.
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
Veritabanı formu tamamlandıktan sonra SQL Veritabanı için Oluştur'a tıklayın. Bu adım birkaç dakika sürebilir.
Araç çubuğunda Bildirimler’e tıklayarak dağıtım işlemini izleyin.

Sunucu düzeyinde IP güvenlik duvarı kuralı oluşturma
SQL Veritabanı 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 olmadığı sürece dış uygulama ve araçların sunucuya ve sunucu üzerinde herhangi bir veritabanına bağlanmasını önler. Veritabanınıza dış bağlantı sağlamak 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. Bu hizmete bir kurumsal ağdan bağlanmaya çalışıyorsanız ağ güvenlik duvarı tarafından 1433 bağlantı noktası üzerinden giden trafiğe izin verilmiyor olabilir. Öyleyse, yöneticiniz 1433 bağlantı noktasını açmadıkça veritabanınıza bağlanamazsınız.
Dağıtım tamamlandıktan sonra, SQL menüsünden Veritabanlarını kaldır'a tıklayın ve ardından SQL veritabanları sayfasındaveri tabanınıza tıklayın. Veritabanınıza ilişkin 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.
Sunucudan ve veritabanlarınıza bağlanmak için bu tam sunucu adını SQL Server Management Studio.

Araç çubuğunda Sunucu güvenlik duvarını ayarla’ya tıklayın. Sunucunun Güvenlik duvarı ayarları sayfası açılır.

Geçerli IP adresinizi yeni bir IP güvenlik duvarı kuralına eklemek için araç çubuğunda İstemci IP'sini ekle'ye tıklayın. IP güvenlik duvarı kuralı, tek bir IP adresi veya bir IP adresi aralığı için 1433 bağlantı noktasını açabilir.
Kaydet’e tıklayın. Sunucuda 1433 bağlantı noktasını açarak geçerli IP adresiniz için sunucu düzeyinde bir IP güvenlik duvarı kuralı oluşturulur.
Tamam’a tıklayın ve sonra Güvenlik duvarı ayarları sayfasını kapatın.
IP adresiniz artık IP güvenlik duvarı üzerinden geçebilirsiniz. Artık veritabanınıza bağlanmak için tercih SQL Server Management Studio başka bir araçla bağlantı kurabilirsiniz. Daha önce oluşturduğunuz sunucu yöneticisi hesabını kullanmaya emin olun.
Önemli
Varsayılan olarak, ip güvenlik SQL Veritabanı üzerinden erişim tüm Azure hizmetleri için etkinleştirilir. Tüm Azure hizmetleri için erişimi devre dışı bırakmak için bu sayfada KAPATLI'ya tıklayın.
C# program örneği
Bu makalenin sonraki bölümlerinde Transact-SQL (T-SQL) deyimlerini SQL veritabanına göndermek için ADO.NET kullanan bir C# programı bulunmaktadır. C# programı aşağıdaki eylemleri gösterir:
- ADO.NET kullanarak SQL veritabanı 'na bağlanma
- T-SQL deyimleri döndüren yöntemler
- Tablo oluşturma
- Tabloları verilerle doldurma
- Verileri güncelleştirme, silme ve seçme
- T-SQL ' i veritabanına gönder
Varlık Ilişkisi diyagramı (ERD)
CREATE TABLEDeyimler iki tablo arasında yabancı anahtar (FK) Ilişkisi oluşturmak için Başvurular anahtar sözcüğünü içerir. Tempdb kullanıyorsanız, --REFERENCES bir dizi baştaki tire kullanarak anahtar sözcüğü not edin.
ERD iki tablo arasındaki ilişkiyi görüntüler. TabEmployee. DepartmentCode alt sütunundaki değerler, tabdepartment. DepartmentCode üst sütunundaki değerlerle sınırlıdır.

Not
T-SQL ' i, tablo adlarına bir lider eklemek için, # bunları tempdb'de geçici tablolar olarak oluşturan bir seçenek olacak şekilde düzenleyebilirsiniz. Bu, kullanılabilir test veritabanı olmadığında tanıtım amacıyla faydalıdır. Yabancı anahtarlara yapılan herhangi bir başvuru, kullanımları sırasında zorlanmaz ve geçici tablolar, programın çalışması bittikten sonra bağlantı kapandığında otomatik olarak silinir.
Derlemek ve çalıştırmak için
C# programı mantıksal olarak bir. cs dosyasıdır ve her bir bloğun anlaşılması daha kolay anlamak için fiziksel olarak birçok kod bloğuna bölünmüştür. Programı derlemek ve çalıştırmak için aşağıdaki adımları uygulayın:
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.
Program. cs dosyasında, kod başlangıç satırları ' nı aşağıdaki adımlarla değiştirin:
Aşağıdaki kod bloklarını kopyalayıp, sunulan aynı sırada kopyalayıp yapıştırın, bkz. veritabanına Bağlan, T-SQL oluşturve veritabanına gönder.
Yönteminde aşağıdaki değerleri değiştirin
Main:- CB. DataSource
- CB. UserID
- CB. Parolayı
- TialCatalogcb.Ini
System.Data.dll bütünleştirilmiş koda başvurulduğunu doğrulayın. Doğrulamak için Çözüm Gezgini bölmesinde Başvurular düğümünü genişletin.
Visual Studio 'dan programı derlemek ve çalıştırmak için Başlat düğmesini seçin. Rapor çıktısı 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ı 'na 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;
";
}
T-SQL ' i veritabanına gönder
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:
- veritabanını kullanarak veritabanı Azure portal
- Güvenlik duvarını kullanarak sunucu düzeyinde IP güvenlik duvarı Azure portal
- 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.