Zelfstudie: Een relationele database ontwerpen in Azure SQL Database C# en ADO.NET
van toepassing op:Azure SQL Database-
Azure SQL Database is een relationele database-as-a-service (DBaaS) in de Microsoft Cloud (Azure). In deze zelfstudie leert u hoe u Azure Portal en ADO.NET gebruikt met Visual Studio om het volgende te doen:
- Een database maken met behulp van Azure Portal
- Een IP-firewallregel op serverniveau instellen met behulp van Azure Portal
- Verbinding maken met de database met ADO.NET en Visual Studio
- Tabellen maken met ADO.NET
- Gegevens invoegen, bijwerken en verwijderen met ADO.NET
- Gegevens opvragen ADO.NET
Fooi
Deze gratis Learn-module laat zien hoe u een ASP.NET-toepassing ontwikkelt en configureert waarmee query's worden uitgevoerd op een Azure SQL Database-, inclusief het maken van een eenvoudige database.
Voorwaarden
- Een installatie van Visual Studio 2019 of hoger.
- Als u geen Azure-abonnement hebt, u een gratis account maken voordat u begint.
- Als u nog geen Azure SQL Database hebt gemaakt, gaat u naar quickstart: Een individuele database maken. Zoek naar de optie om uw aanbieding te gebruiken om Azure SQL Database gratis te implementeren.
Aanmelden bij Azure Portal
Meld u aan bij de Azure Portal.
Een IP-firewallregel op serverniveau maken
SQL Database maakt een IP-firewall op serverniveau. Deze firewall voorkomt dat externe toepassingen en hulpprogramma's verbinding maken met de server en databases op de server, tenzij een firewallregel het IP-adres via de firewall toestaat. Als u externe connectiviteit met uw database wilt inschakelen, moet u eerst een IP-firewallregel toevoegen voor uw IP-adres (of IP-adresbereik). Volg deze stappen om een IP-firewallregel op serverniveau te maken.
Belangrijk
SQL Database communiceert via poort 1433. Als u verbinding probeert te maken met deze service vanuit een bedrijfsnetwerk, is uitgaand verkeer via poort 1433 mogelijk niet toegestaan door de firewall van uw netwerk. Zo ja, dan kunt u geen verbinding maken met uw database, tenzij de beheerder poort 1433 opent.
Nadat de implementatie is voltooid, selecteert u SQL-databases in het menu aan de linkerkant en selecteert u vervolgens yourDatabase op de pagina SQL-databases. De overzichtspagina voor uw database wordt geopend, met de volledig gekwalificeerde Servernaam (zoals yourserver.database.windows.net) en opties voor verdere configuratie.
Kopieer deze volledig gekwalificeerde servernaam voor gebruik om verbinding te maken met uw server en databases vanuit SQL Server Management Studio.
Navigeer in Azure Portal naar de logische SQL-server voor uw Azure SQL Database. De eenvoudigste manier is om de servernaam waarde te selecteren op de pagina SQL-databank.
Selecteer in het resourcemenu onder InstellingenNetwerken.
Kies het tabblad Openbare toegang en selecteer vervolgens Geselecteerde netwerken onder Openbare netwerktoegang.
Schuif omlaag naar de sectie Firewallregels.
Selecteer Uw IPv4-clientadres toevoegen om uw huidige IP-adres toe te voegen aan een nieuwe IP-firewallregel. Een IP-firewallregel kan poort 1433 openen voor één IP-adres of een bereik van IP-adressen.
Selecteer opslaan. Er wordt een IP-firewallregel op serverniveau gemaakt voor uw huidige IP-adres dat poort 1433 op de server opent.
Selecteer OK- en sluit vervolgens de pagina firewallinstellingen.
Uw IP-adres kan nu via de IP-firewall worden doorgegeven. U kunt nu verbinding maken met uw database met behulp van SQL Server Management Studio of een ander hulpprogramma van uw keuze. Zorg ervoor dat u het serverbeheerdersaccount gebruikt dat u eerder hebt gemaakt.
Belangrijk
Toegang via de IP-firewall van SQL Database is standaard ingeschakeld voor alle Azure-services. Selecteer UIT op deze pagina om de toegang voor alle Azure-services uit te schakelen.
Voorbeeld van C#-programma
In de volgende secties van dit artikel wordt een C#-programma weergegeven dat gebruikmaakt van ADO.NET om Transact-SQL -instructies (T-SQL) naar SQL Database te verzenden. Het C#-programma demonstreert de volgende acties:
- Verbinding maken met SQL Database met behulp van ADO.NET
-
Methoden die T-SQL-instructies teruggeven
- Tabellen maken
- Tabellen vullen met gegevens
- Gegevens bijwerken, verwijderen en selecteren
- T-SQL verzenden naar de database
Entiteitsrelatiediagram (ERD)
De CREATE TABLE
-instructies hebben betrekking op het trefwoord VERWIJZINGEN om een relatie met refererende sleutel (FK) tussen twee tabellen te maken. Als u tempdb-gebruikt, markeert u het trefwoord --REFERENCES
met behulp van een paar voorloopstreepjes.
De ERD geeft de relatie tussen de twee tabellen weer. De waarden in de kolom tabEmployee.DepartmentCodeonderliggende zijn beperkt tot waarden uit de kolom tabDepartment.DepartmentCodebovenliggende.
Notitie
U kunt de T-SQL bewerken om een voorloop-#
toe te voegen aan de tabelnamen, waardoor ze worden gemaakt als tijdelijke tabellen in tempdb-. Dit is handig voor demonstratiedoeleinden wanneer er geen testdatabase beschikbaar is. Elke verwijzing naar vreemde sleutels wordt niet afgedwongen tijdens hun gebruik en tijdelijke tabellen worden automatisch verwijderd wanneer de verbinding wordt verbroken na afloop van het programma.
Compileren en uitvoeren
Het C#-programma is logisch één .cs-bestand en is fysiek onderverdeeld in verschillende codeblokken, zodat elk blok gemakkelijker te begrijpen is. Voer de volgende stappen uit om het programma te compileren en uit te voeren:
Maak een C#-project in Visual Studio. Het projecttype moet een Console-zijn, te vinden onder Sjablonen>Visual C#>Windows Desktop>Console App (.NET Framework).
Vervang in het bestand Program.csde beginregels code door de volgende regels:
Kopieer en plak de volgende codeblokken, in dezelfde volgorde die ze worden weergegeven, zie Verbinding maken met database, T-SQL-genereren en Verzenden naar database.
Wijzig de volgende waarden in de methode
Main
:- cb.DataSource
- cb. UserID-
- cb.Wachtwoord
- cb.InitialCatalog
Controleer of er naar de assembly System.Data.dll wordt verwezen. Als u dit wilt controleren, vouwt u het knooppunt Verwijzingen uit in het deelvenster Oplossingsverkenner.
Als u het programma wilt bouwen en uitvoeren vanuit Visual Studio, selecteert u de knop Start. De rapportuitvoer wordt weergegeven in een programmavenster, hoewel DE GUID-waarden per testuitvoering verschillen.
================================= 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...
Verbinding maken met SQL Database met behulp van 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();
}
Methoden die T-SQL-instructies retourneren
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 verzenden naar de database
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
}
Tip
Ga voor meer informatie over het schrijven van SQL-query's naar Zelfstudie: Transact-SQL statements schrijven.
Verwante inhoud
- Azure SQL Database gratis implementeren
- Wat is er nieuw in Azure SQL Database?
- Inhoudsverwijzing configureren en beheren - Azure SQL Database-
- kosten voor Azure SQL Database- plannen en beheren
Volgende stap
Ga naar de volgende zelfstudie voor meer informatie over gegevensmigratie.