Oktatóanyag: Relációs adatbázis tervezése az Azure SQL Database C# és ADO.NET
A következőre vonatkozik: Azure SQL Database
Az Azure SQL Database egy szolgáltatásként nyújtott relációs adatbázis (DBaaS) a Microsoft Cloudban (Azure). Ez az oktatóanyag bemutatja, hogyan végezheti el a következőket az Azure Portal, valamint az ADO.NET és a Visual Studio használatával:
- Adatbázis létrehozása az Azure Portal használatával
- Kiszolgálószintű IP-tűzfalszabály beállítása az Azure Portal használatával
- Csatlakozás az adatbázishoz az ADO.NET és a Visual Studio használatával
- Táblázatok létrehozása az ADO.NET-tel
- Adatok beszúrása, frissítése és törlése az ADO.NET-tel
- Adatok lekérdezése – ADO.NET
Tipp.
Ez az ingyenes Learn-modul bemutatja, hogyan fejleszthet és konfigurálhat egy Azure SQL Database-t lekérdező ASP.NET alkalmazást, beleértve egy egyszerű adatbázis létrehozását is.
Előfeltételek
- A Visual Studio 2019 vagy újabb verziójának telepítése.
- Ha még nincs Azure-előfizetése, kezdés előtt hozzon létre egy ingyenes fiókot.
- Ha még nem hozott létre Azure SQL Database-adatbázist, látogasson el a gyorsútmutatóra: Egyetlen adatbázis létrehozása. Keresse meg azt a lehetőséget, hogy az ajánlatával ingyenesen kipróbálhassa az Azure SQL Database-t (előzetes verzió).
Jelentkezzen be az Azure Portalra
Jelentkezzen be az Azure Portalra.
Kiszolgálószintű IP-tűzfalszabály létrehozása
Az SQL Database kiszolgálószintű IP-tűzfalat hoz létre. Ez a tűzfal megakadályozza, hogy külső alkalmazások és eszközök csatlakozzanak a kiszolgálóhoz és a kiszolgálón lévő adatbázisokhoz, kivéve, ha egy tűzfalszabály engedélyezi az IP-címüket a tűzfalon keresztül. Az adatbázis külső kapcsolatának engedélyezéséhez először hozzá kell adnia egy IP-tűzfalszabályt az IP-címhez (vagy IP-címtartományhoz). Kövesse az alábbi lépéseket egy kiszolgálószintű IP-tűzfalszabály létrehozásához.
Fontos
Az SQL Database az 1433-as porton kommunikál. Ha vállalati hálózaton belülről próbál csatlakozni ehhez a szolgáltatáshoz, előfordulhat, hogy a hálózat tűzfala nem engedélyezi a kimenő forgalmat az 1433-as porton keresztül. Ha igen, csak akkor csatlakozhat az adatbázishoz, ha a rendszergazda meg nem nyitja az 1433-at.
Az üzembe helyezés befejezése után válassza ki az SQL-adatbázisokat a bal oldali menüből, majd válassza ki aDatabase-et az SQL-adatbázisok oldalán. Megnyílik az adatbázis áttekintő oldala, amelyen a kiszolgáló teljes neve (például yourserver.database.windows.net) látható, és további konfigurációs lehetőségeket biztosít.
Másolja ki ezt a teljes kiszolgálónevet a kiszolgálóhoz és az adatbázisokhoz való csatlakozáshoz az SQL Server Management Studióból.
Válassza a Hálózatkezelés lehetőséget a Gépház alatt. Válassza a Nyilvános hozzáférés lapot, majd válassza a Kijelölt hálózatok lehetőséget a Nyilvános hálózati hozzáférés csoportban a Tűzfalszabályok szakasz megjelenítéséhez.
Válassza az Eszköztár ügyfél IP-címének hozzáadása lehetőséget az aktuális IP-cím új IP-tűzfalszabályhoz való hozzáadásához. Az IP-tűzfalszabály megnyithatja az 1433-at egyetlen IP-címhez vagy IP-címtartományhoz.
Válassza a Mentés lehetőséget. Létrejön egy kiszolgálószintű IP-tűzfalszabály az aktuális IP-cím 1433-at megnyitó portjához a kiszolgálón.
Válassza az OK gombot, majd zárja be a Tűzfal beállításai lapot.
Az IP-cím most már áthaladhat az IP-tűzfalon. Most már csatlakozhat az adatbázishoz az SQL Server Management Studióval vagy egy tetszőleges másik eszközzel. Mindenképpen használja a korábban létrehozott kiszolgálói rendszergazdai fiókot.
Fontos
Alapértelmezés szerint az SQL Database IP-tűzfalon keresztüli hozzáférés minden Azure-szolgáltatáshoz engedélyezve van. Ezen a lapon a KI gombra kattintva letilthatja az összes Azure-szolgáltatáshoz való hozzáférést.
Példa C#-programra
A cikk következő szakaszai egy C#-programot mutatnak be, amely ADO.NET használ Transact-SQL-utasítások (T-SQL) SQL Database-nek való küldéséhez. A C# program a következő műveleteket mutatja be:
- Csatlakozás az SQL Database-be ADO.NET
- T-SQL-utasításokat visszatűnő metódusok
- Táblák létrehozása
- Táblák feltöltése adatokkal
- Adatok frissítése, törlése és kijelölése
- T-SQL küldése az adatbázisba
Entitáskapcsolati diagram (ERD)
Az CREATE TABLE
utasítások tartalmazzák a REFERENCES kulcsszót, amely két tábla közötti idegen kulcs (FK) kapcsolatot hoz létre. Ha tempdb-t használ, fűzzön megjegyzést a --REFERENCES
kulcsszóhoz egy pár kezdő gondolatjel használatával.
Az ERD megjeleníti a két tábla közötti kapcsolatot. A tabEmployee.DepartmentCode gyermekoszlop értékei a tabDepartment.DepartmentCodeszülőoszlop értékeire korlátozódnak.
Feljegyzés
A T-SQL szerkesztésével hozzáadhat egy kezdőt #
a táblanevekhez, ami ideiglenes táblákként hozza létre őket a tempdb-ben. Ez bemutató célokra hasznos, ha nincs elérhető tesztadatbázis. Az idegen kulcsokra való hivatkozás nem lesz kényszerítve a használatuk során, és az ideiglenes táblák automatikusan törlődnek, amikor a kapcsolat a program futtatása után bezárul.
Fordítás és futtatás
A C# program logikailag egy .cs fájl, és fizikailag több kódblokkra van osztva, hogy az egyes blokkok könnyebben érthetők legyenek. A program fordításához és futtatásához hajtsa végre a következő lépéseket:
C#-projekt létrehozása a Visual Studióban. A projekttípusnak konzolnak kell lennie, amely a Visual C#>Windows asztali>konzolalkalmazás (.NET-keretrendszer) sablonjai>között található.
A fájlban Program.cs cserélje le a kód kezdősorait a következő lépésekre:
Másolja és illessze be a következő kódblokkokat a bemutatott sorrendben: Csatlakozás adatbázisba, T-SQL létrehozása és Küldés az adatbázisba.
Módosítsa a következő értékeket a
Main
metódusban:- Cb. Datasource
- Cb. Userid
- Cb. Jelszó
- Cb. InitialCatalog
Ellenőrizze, hogy a rendszer hivatkozik-e a szerelvény System.Data.dll . Az ellenőrzéshez bontsa ki a Hivatkozások csomópontot a Megoldáskezelő panelen.
A Program Visual Studióból való létrehozásához és futtatásához kattintson a Start gombra. A jelentés kimenete egy programablakban jelenik meg, de a GUID értékek a tesztfuttatások között eltérőek lesznek.
================================= 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...
Csatlakozás az SQL Database-be 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-utasításokat visszatűnő metódusok
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 küldése az adatbázisba
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
}
Tipp.
Ha többet szeretne megtudni az SQL-lekérdezések írásáról, látogasson el a Transact-SQL-utasítások írása című oktatóanyagba.
Kapcsolódó tartalom
- Próbálja ki ingyenesen az Azure SQL Database-t (előzetes verzió)
- Az Azure SQL Database újdonságai
- Tartalomhivatkozás konfigurálása és kezelése – Azure SQL Database
- Az Azure SQL Database költségeinek megtervezése és kezelése
Következő lépés
Az adatmigrálásról a következő oktatóanyagban olvashat.