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 DBaaS (database-as-a-service) in Microsoft Cloud (Azure). In deze zelfstudie leert u hoe u Azure Portal en ADO.NET met Visual Studio gebruikt voor de volgende taken:
- Een database maken met behulp van de Azure-portal
- Een IP-firewallregel op serverniveau instellen met 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
- Querygegevens ADO.NET
Tip
Deze gratis Learn-module laat zien hoe u een ASP.NET-toepassing ontwikkelt en configureert waarmee een query wordt uitgevoerd op een Azure SQL Database, inclusief het maken van een eenvoudige database.
Vereisten
- Een installatie van Visual Studio 2019 of nieuwer.
- Als u geen Azure-abonnement hebt, maakt u een gratis account 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 proberen (preview).
Meld u aan bij Azure Portal
Meld u aan bij de Azure-portal.
Een IP-firewallregel op serverniveau maken
SQL Database maakt een IP-firewall op serverniveau. De firewall voorkomt dat externe toepassingen en hulpprogramma's verbinding maken met de server of databases op de server, tenzij een firewallregel hun IP via de firewall toestaat. Als u externe connectiviteit voor uw database wilt inschakelen, moet u eerst een IP-firewallregel voor uw IP-adres (of IP-adresbereik) toevoegen. Volg deze stappen als u een IP-firewallregel op serverniveau wilt 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. In dat geval kunt u geen verbinding maken met uw database, tenzij de beheerder poort 1433 openstelt.
Nadat de implementatie is voltooid, selecteert u SQL-databases in het linkermenu en selecteert u vervolgens uwDatabase op de pagina SQL-databases. De overzichtspagina voor de database wordt geopend, met de volledig gekwalificeerde servernaam (bijvoorbeeld yourserver.database.windows.net) en opties voor verdere configuratie.
Kopieer vanuit SQL Server Management Studio deze volledig gekwalificeerde servernaam om verbinding te maken met de server en de databases.
Selecteer Netwerken onder Instellingen. Kies het tabblad Openbare toegang en selecteer vervolgens Geselecteerde netwerken onder Openbare netwerktoegang om de sectie Firewallregels weer te geven .
Selecteer Client-IP toevoegen op de werkbalk om uw huidige IP-adres toe te voegen aan een nieuwe IP-firewallregel. Een IP-firewallregel kan poort 1433 openen voor een afzonderlijk IP-adres of voor een aantal IP-adressen.
Selecteer Opslaan. Er wordt een IP-firewallregel op serverniveau gemaakt voor uw huidige IP-adres waarbij poort 1433 wordt geopend op de server.
Selecteer OK en sluit de pagina Firewallinstellingen.
Uw IP-adres wordt niet meer geblokkeerd via de IP-firewall. U kunt nu verbinding maken met uw database met SQL Server Management Studio of een ander hulpprogramma naar keuze. Gebruik het beheerdersaccount voor de server dat u eerder hebt gemaakt.
Belangrijk
Voor alle Azure-services is toegang via de IP-firewall van SQL Database standaard ingeschakeld. 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 gepresenteerd dat gebruikmaakt van ADO.NET voor het verzenden van Transact-SQL-instructies (T-SQL) naar SQL Database. Met het C#-programma worden de volgende acties aangetoond:
- Verbinding maken met SQL Database met behulp van ADO.NET
- Methoden voor het retourneren van T-SQL-instructies
- Tabellen maken
- Tabellen vullen met gegevens
- Gegevens bijwerken, verwijderen en selecteren
- T-SQL indienen bij de database
ERD (diagram Relatie tussen eenheden)
Voor de CREATE TABLE
-instructies is het trefwoord VERWIJZINGEN nodig voor het maken van een FK-relatie (refererende sleutel) tussen twee tabellen. Als u tempdb gebruikt, geeft u commentaar bij het trefwoord --REFERENCES
met behulp van twee streepjes aan het begin.
Op de ERD wordt de relatie tussen de twee tabellen weergegeven. De waarden in de onderliggende kolom tabEmployee.DepartmentCode zijn beperkt tot de waarden in de bovenliggende kolom tabDepartment.Department.
Notitie
U kunt de T-SQL bewerken om een #
toe te voegen vóór de tabelnamen. Hierdoor worden ze gemaakt als tijdelijke tabellen in tempdb. Dit is nuttig voor demonstratiedoeleinden, wanneer er geen testdatabase beschikbaar is. Er worden geen verwijzingen naar refererende sleutels afgedwongen wanneer deze worden gebruikt. Tijdelijke tabellen worden automatisch verwijderd wanneer de verbinding wordt verbroken zodra het programma is uitgevoerd.
Compileren en uitvoeren
Het C#-programma is logischerwijs één .cs-bestand en fysiek onderverdeeld in verschillende codeblokken, waardoor elk blok gemakkelijker te begrijpen is. Ga als volgt te werk om dit programma te compileren en uit te voeren:
Maak een C#-project in Visual Studio. Het projecttype moet Console zijn. U vindt dit onder Sjablonen>Visual C#>Windows Desktop>Console App (.NET Framework).
In het bestand Program.cs vervangt u de beginregels van de code aan de hand van de volgende stappen:
Kopieer en plak de volgende codeblokken in de volgorde waarin ze worden gepresenteerd (zie Verbinding maken met de database, T-SQL genereren en Indienen bij database).
Wijzig de volgende waarden in de
Main
-methode:- cb.DataSource
- cb.UserID
- cb.Password
- cb.InitialCatalog
Controleer of wordt verwezen naar de assembly System.Data.dll. Vouw in het deelvenster Solution Explorer het knooppunt Verwijzingen uit om dit te controleren.
Selecteer de knop Start om het programma te bouwen en uit te voeren in Visual Studio. De rapportuitvoer wordt in een programmavenster weergegeven, hoewel GUID-waarden tussen testuitvoeringen zullen variëren.
================================= 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 voor het retourneren van T-SQL-instructies
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 indienen bij 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 naar Zelfstudie: Transact-SQL-instructies schrijven voor meer informatie over het schrijven van SQL-query's.
Gerelateerde inhoud
- Probeer Azure SQL Database gratis (preview)
- 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.
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor