Öğ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.
Azure portalının sol üst köşesinde bulunan Kaynak oluştur öğesini seçin.
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.
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. 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. Seç’i seçin.
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.
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
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.
Araç çubuğunda Bildirimler’i seçerek dağıtım işlemini izleyin.
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.
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.
SQL Server Management Studio sunucunuza ve veritabanlarınıza bağlanmak için bu tam sunucu adını kopyalayın.
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.
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.
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.
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:
- ADO.NET kullanarak SQL Veritabanı bağlanma
- T-SQL deyimleri döndüren yöntemler
- Tablo oluşturma
- Tabloları verilerle doldurma
- Verileri güncelleştirme, silme ve seçme
- Veritabanına T-SQL gönderme
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.
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:
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, kodun başlangıç satırlarını aşağıdaki adımlarla değiştirin:
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.
yönteminde
Main
aşağıdaki değerleri değiştirin:- Cb. Datasource
- Cb. Userıd
- Cb. Parola
- Cb. InitialCatalog
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.
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.