Öğretici: Azure SQL Veritabanı C# ve ADO.NET ilişkisel veritabanı tasarlama
Şunlar için geçerlidir: Azure SQL Veritabanı
Azure SQL Veritabanı, Microsoft Bulutu'ndaki (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:
- Azure portalını kullanarak veritabanı oluşturma
- Azure portalını 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
İpucu
Bu ücretsiz Learn modülü, basit bir veritabanı oluşturma dahil olmak üzere bir Azure SQL Veritabanı sorgulayan bir ASP.NET uygulaması geliştirmeyi ve yapılandırmayı gösterir.
Önkoşullar
- Visual Studio 2019 veya üzeri bir yükleme.
- Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
- Henüz oluşturulmuş bir Azure SQL Veritabanı yoksa Hızlı Başlangıç: Tek bir veritabanı oluşturma'yı ziyaret edin. Teklifinizi kullanarak Azure SQL Veritabanı ücretsiz (önizleme) deneme seçeneğine bakın.
Azure portalda oturum açma
Azure Portal’ında oturum açın.
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ı seçin 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 için seçenekler sağlar.
Sql Server Management Studio'dan sunucunuza ve veritabanlarınıza bağlanmak için bu tam sunucu adını kopyalayın.
Azure portalında, Azure SQL Veritabanı mantıksal SQL sunucusuna gidin. En kolay yol, SQL veritabanı sayfasında Sunucu adı değerini seçmektir.
Kaynak menüsünde, Ayarlar'ın altında Ağ'ı seçin.
Genel Erişim sekmesini seçin ve ardından Genel ağ erişimi'nin altında Seçili ağlar'ı seçin.
Ekranı aşağı kaydırarak Güvenlik duvarı kuralları bölümüne gelin.
Geçerli IP adresinizi yeni bir IP güvenlik duvarı kuralına eklemek için İstemci IPv4 adresinizi 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. Geçerli IP adresiniz için sunucuda 1433 numaralı bağlantı noktasını açan bir sunucu düzeyinde 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'yu veya tercih ettiğ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ştur
- 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, bir çift baştaki tireyi --REFERENCES
kullanarak anahtar sözcüğü açıklama satırı yapın.
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
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 bir test veritabanı olmadığında tanıtım amacıyla kullanışlıdır. Yabancı anahtarlara yapılan başvurular, kullanımları sırasında uygulanmaz ve geçici tablolar, program çalışması bittikten sonra bağlantı kapatıldığında otomatik olarak silinir.
Derlemek ve çalıştırmak için
C# programı mantıksal olarak .cs bir dosyadır ve her bloğun anlaşılmasını kolaylaştırmak için fiziksel olarak birkaç kod bloğuna ayrılı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.
dosya Program.cs başlangıç kod satırlarını aşağıdaki adımlarla değiştirin:
Aşağıdaki kod bloklarını kopyalayıp, sunuldukları sırayla yapıştırın. 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. Veri Kaynağı
- Cb. Kullanıcı Kimliği
- Cb. Parola
- Cb. InitialCatalog
Derleme System.Data.dll başvurıldığı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
}
İpucu
SQL sorguları yazma hakkında daha fazla bilgi edinmek için Öğretici: Transact-SQL deyimleri yazma bağlantısını ziyaret edin.
İlgili içerik
- Azure SQL Veritabanı ücretsiz deneyin (önizleme)
- Azure SQL Veritabanı'daki yenilikler
- İçerik başvurularını yapılandırma ve yönetme - Azure SQL Veritabanı
- Azure SQL Veritabanı maliyetlerini planlama ve yönetme
Sonraki adım
Veri geçişi hakkında bilgi edinmek için sonraki öğreticiye geçin.