Självstudie: Utforma en relationsdatabas i Azure SQL Database C# och ADO.NET
GÄLLER FÖR:
Azure SQL Database
Azure SQL Database är en relationsdatabas-som-tjänst (DBaaS) som bygger på Microsoft Cloud (Azure). I de här självstudierna får du lära dig att använda Azure-portalen och ADO.NET med Visual Studio för att:
- Skapa en databas med hjälp av Azure Portal
- Konfigurera en IP-brandväggsregel på servernivå med hjälp av Azure-portalen
- Ansluta till databasen med ADO.NET och Visual Studio
- Skapa tabeller med ADO.NET
- Infoga, uppdatera och ta bort data med ADO.NET
- Fråga efter data med ADO.NET
*Om du inte har någon Azure-prenumeration kan du skapa ett kostnadsfritt konto innan du börjar.
Tips
I följande Microsoft Learn-modulen får du lära dig hur du utvecklar och konfigurerar ett ASP.NET-programsom frågar en Azure SQL Database , inklusive hur du skapar en enkel databas.
Förutsättningar
En installation av Visual Studio 2019 eller senare.
Skapa en tom databas i Azure SQL Database
En databas i Azure SQL Database skapas med en definierad uppsättning beräknings- och lagringsresurser. Databasen skapas i en Azure-resursgrupp och hanteras med hjälp av en logisk SQL server.
Följ dessa steg för att skapa en tom databas.
Klicka på Skapa en resurs längst upp till vänster i Azure Portal.
Välj Databaser i avsnittet Azure Marketplace på sidan Nytt och klicka sedan på SQL Database i avsnittet Aktuellt.

Fyll i SQL Database formulär med följande information, som du ser i föregående bild:
Inställning Föreslaget värde Beskrivning Databasnamn yourDatabase För giltiga databasnamn, se databasidentifierare. Prenumeration yourSubscription Mer information om dina prenumerationer finns i Prenumerationer. Resursgrupp yourResourceGroup Giltiga resursgruppnamn finns i Namngivningsregler och begränsningar. Välj källa Tom databas Anger att en tom databas ska skapas. Klicka på Server om du vill använda en befintlig server eller skapa och konfigurera en ny server. Välj antingen en befintlig server eller klicka på Skapa en ny server och fyll i följande information i formuläret Ny server:
Inställning Föreslaget värde Beskrivning Servernamn Valfritt globalt unikt namn Giltiga servernamn finns i Namngivningsregler och begränsningar. Inloggning för serveradministratör Valfritt giltigt namn För giltiga inloggningsnamn, se Databasidentifierare. Lösenord Valfritt giltigt lösenord Lösenordet måste innehålla minst åtta tecken och måste innehålla tecken från tre av följande kategorier: versaler, gemener, siffror och icke-alfanumeriska tecken. Plats Valfri giltig plats För information om regioner, se Azure-regioner. 
Klicka på Välj.
Klicka på Prisnivå för att ange tjänstnivå, antalet DTU:er eller V-kärnor och mängden lagring. Du kan undersöka alternativen för antalet DTU:er/V-kärnor och lagringsutrymme som du har tillgång till på varje tjänstnivå.
När du har valt tjänstnivå, antalet DTU:er eller virtuella kärnor samt mängden lagring klickar du på Använd.
Ange en sortering för den tomma databasen (använd standardvärdet för de här självstudierna). Mer information om sorteringar finns i Sorteringar.
Nu när du har fyllt i SQL Database-formuläret klickar du på Skapa så att databasen etableras. Det här steget kan ta några minuter.
Klicka på Aviseringar i verktygsfältet för att övervaka distributionsprocessen.

Skapa en IP-brandväggsregel på servernivå
SQL Database skapar en IP-brandvägg på servernivå. Den här brandväggen förhindrar att externa program och verktyg ansluter till servern eller databaser på servern såvida inte en brandväggsregel tillåter deras IP-adresser genom brandväggen. Om du vill aktivera extern anslutning till databasen måste du först lägga till en IP-brandväggsregel för din IP-adress (eller IP-adressintervall). Följ dessa steg för att skapa en IP-brandväggsregel på servernivå.
Viktigt
SQL Database kommunicerar via port 1433. Om du försöker ansluta till den här tjänsten från ett företagsnätverk kan utgående trafik via port 1433 bli nekad av nätverkets brandvägg. I så fall kan du inte ansluta till databasen om inte administratören öppnar port 1433.
När distributionen är klar klickar du SQL databaserna i den vänstra menyn och klickar sedan på yourDatabase på SQL databassidan. Översiktssidan för databasen öppnas och visar det fullständigt kvalificerade servernamnet (till exempel yourserver.database.windows.net) tillsammans med alternativ för ytterligare konfiguration.
Kopiera det här fullständigt kvalificerade servernamnet. Du behöver det när du ansluter till servern och dess databaser från SQL Server Management Studio.

Klicka på Konfigurera serverns brandvägg i verktygsfältet. Sidan Brandväggsinställningar för servern öppnas.

Klicka på Lägg till klient-IP i verktygsfältet och lägg till din aktuella IP-adress i en ny IP-brandväggsregel. Med en IP-brandväggsregel kan du öppna port 1433 för en enskild IP-adress eller för IP-adressintervall.
Klicka på Spara. En IP-brandväggsregel på servernivå skapas för din aktuella IP-adress som öppnar port 1433 på servern.
Klicka på OK och stäng sedan sidan Brandväggsinställningar.
Din IP-adress kan nu passera genom IP-brandväggen. Nu kan du ansluta till databasen med SQL Server Management Studio eller något annat verktyg. Se till att använda serveradmin-kontot som du skapade tidigare.
Viktigt
Som standard är åtkomst via IP-brandväggen för SQL Database aktiverad för alla Azure-tjänster. Klicka på AV på den här sidan för att inaktivera åtkomst för alla Azure-tjänster.
C#-programexempel
Nästa avsnitt i den här artikeln visar ett C#-program som använder ADO.NET för att skicka Transact-SQL-uttryck (T-SQL) till SQL Database. C#-programmet visar följande åtgärder:
- Ansluta till SQL Database med ADO.NET
- Metoder som returnerar instruktioner för T-SQL
- Skapa tabeller
- Fyll i tabeller med data
- Uppdatera, ta bort och välj data
- Skicka T-SQL till databasen
Entitetsambandsdiagram (ERD)
CREATE TABLEInstruktionerna innehåller nyckelordet REFERENSER för att skapa en sekundärnyckelrelation (FK) mellan två tabeller. Om du använder tempdb kommenterar du ut --REFERENCES-nyckelordet med hjälp av ett par inledande tankstreck.
ERD visar relationen mellan de två tabellerna. Värdena i den underordnade kolumnen tabEmployee. DepartmentCode är begränsade till värden från den överordnade kolumnen tabDepartment. DepartmentCode .

Anteckning
Du har möjlighet att redigera T-SQL för att lägga till en ledande # till tabellnamnen, vilket skapar dem som temporära tabeller i tempdb. Det är användbart i visningssyfte när ingen testdatabas är tillgänglig. Alla referenser till sekundärnycklar tillämpas inte under deras användning och temporära tabeller tas automatiskt bort när anslutningen stängs efter att programmet har kört färdigt.
Kompilera och köra
C#-programmet är logiskt en .cs-fil och fysiskt uppdelad i flera kodblock som gör det enklare att förstå varje block. Gör följande för att kompilera och köra programmet:
Skapa C#-projektet i Visual Studio. Projekttyp ska vara Konsol, som finns under Mallar > Visual C# > Windows Desktop > Konsolprogram (.NET Framework).
I filen Program.cs ersätter du kodens startlinjer med följande steg:
Kopiera och klistra in följande kodblock, i samma ordning som de visas. Se Anslut till databas, Generera T-SQL och Skicka till databasen.
Ändra följande värden i metoden
Main:- cb.DataSource
- cb.UserID
- cb.Password
- cb.InitialCatalog
Kontrollera att sammansättningen System.Data.dll är refererad. Du kan kontrollera det genom att expandera noden Referenser i fönstret Solution Explorer.
Om du vill bygga och köra programmet från Visual Studio väljer du knappen Start. Rapportutdata visas i programfönstret, men GUID-värden varierar mellan testkörningarna.
================================= 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...
Ansluta till SQL Database med 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();
}
Metoder som returnerar instruktioner för T-SQL
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;
";
}
Skicka T-SQL till databasen
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
}
Nästa steg
I de här självstudierna har du lärt dig grundläggande databasuppgifter, till exempel att skapa en databas och tabeller, ansluta till databasen, läsa in data och köra frågor. Du har lärt dig att:
- Skapa en databas med hjälp av Azure Portal
- Konfigurera en IP-brandväggsregel på servernivå med hjälp av Azure-portalen
- Ansluta till databasen med ADO.NET och Visual Studio
- Skapa tabeller med ADO.NET
- Infoga, uppdatera och ta bort data med ADO.NET
- Fråga efter data med ADO.NET
Gå vidare till nästa självstudie om du vill lära dig mer om migrering av data.