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 en tjänst (DBaaS) i Microsoft Cloud (Azure). I den här självstudien lär du dig hur du använder Azure-portalen och ADO.NET med Visual Studio för att:
- Skapa en databas med hjälp av Azure-portalen
- 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
- Sök i data med ADO.NET
Tips
Den här kostnadsfria Learn-modulen visar hur du utvecklar och konfigurerar en ASP.NET-applikation som frågar en Azure SQL Database, inklusive skapandet av en enkel databas.
Förutsättningar
- En installation av Visual Studio 2019 eller senare.
- Om du inte har en Azure-prenumeration skapa ett kostnadsfritt konto innan du börjar.
- Om du inte redan har skapat en Azure SQL Database kan du gå till snabbstarten : Skapa en enkel databas. Sök efter möjligheten att utnyttja ditt erbjudande för att Distribuera Azure SQL Database utan kostnad.
Logga in på Azure-portalen
Logga in på Azure-portalen.
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 och databaser på servern om inte en brandväggsregel tillåter deras IP-adress via 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 de här stegen för att skapa en IP-brandväggsregel på servernivå.
Viktig
SQL Database kommunicerar via port 1433. Om du försöker ansluta till den här tjänsten inifrån ett företagsnätverk kanske utgående trafik via port 1433 inte tillåts 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 väljer du SQL-databaser på den vänstra menyn och väljer sedan dinDatabase- på sidan SQL-databaser. Översiktssidan för databasen öppnas och visar det fullständigt kvalificerade Servernamn (till exempel yourserver.database.windows.net) och innehåller alternativ för ytterligare konfiguration.
Kopiera det här fullständigt kvalificerade servernamnet för användning för att ansluta till servern och databaserna från SQL Server Management Studio.
I Azure-portalen navigerar du till den logiska SQL-servern för din Azure SQL Database. Det enklaste sättet är att välja värdet Servernamn på SQL-databassidan.
På resursmenyn går du till Inställningaroch väljer Nätverk.
Välj fliken offentlig åtkomst och välj sedan Valda nätverk under Offentlig nätverksåtkomst.
Rulla ned till avsnittet Brandväggsregler.
Välj Lägg till din klient-IPv4-adress för att lägga till din aktuella IP-adress i en ny IP-brandväggsregel. En IP-brandväggsregel kan öppna port 1433 för en enskild IP-adress eller ett intervall med IP-adresser.
Välj Spara. En brandväggsregel på servernivå för din nuvarande IP-adress skapas, vilket öppnar port 1433 på servern.
Välj 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 hjälp av SQL Server Management Studio eller något annat valfritt verktyg. Se till att använda det serveradministratörskonto som du skapade tidigare.
Viktig
Som standard är åtkomst via SQL Database IP-brandvägg aktiverad för alla Azure-tjänster. Välj OFF på den här sidan för att inaktivera åtkomst för alla Azure-tjänster.
Exempel på C#-program
I nästa avsnitt i den här artikeln presenteras ett C#-program som använder ADO.NET för att skicka Transact-SQL-instruktioner (T-SQL) till SQL Database. C#-programmet visar följande åtgärder:
- Anslut till SQL Database med hjälp av ADO.NET
-
metoder som returnerar T-SQL-instruktioner
- Skapa tabeller
- Fylla i tabeller med data
- Uppdatera, ta bort och välj data
- Skicka T-SQL till databasen
Entitetsrelationsdiagram (ERD)
De CREATE TABLE
-uttrycken omfattar nyckelordet REFERENSER för att skapa en FK-relation (sekundärnyckel) mellan två tabeller. Om du använder tempdbkommenterar du ut nyckelordet --REFERENCES
med hjälp av ett par inledande bindestreck.
ERD visar relationen mellan de två tabellerna. Värdena i kolumnen tabEmployee.DepartmentCodeför barnkolumnen är begränsade till värden från kolumnen tabDepartment.DepartmentCodeför föräldrakolumnen.
Obs
Du kan redigera T-SQL för att lägga till en inledande #
i tabellnamnen, vilket skapar dem som temporära tabeller i tempdb. Detta är användbart i demonstrationssyfte när ingen testdatabas är tillgänglig. Alla referenser till främmande nycklar åberopas inte under deras användning, och temporära tabeller tas bort automatiskt när anslutningen läggs ned efter att programmet har körts klart.
Att kompilera och köra
C#-programmet är logiskt en .cs fil och är fysiskt indelat i flera kodblock för att göra varje block enklare att förstå. Utför följande steg för att kompilera och köra programmet:
Skapa ett C#-projekt i Visual Studio. Projekttypen ska vara en Console, som finns under Templates>Visual C#>Windows Desktop>Console App (.NET Framework).
I filen Program.csersätter du startraderna med kod med följande steg:
Kopiera och klistra in följande kodblock i samma sekvens som de visas i Anslut till databas, Generera T-SQL-och Skicka till databas.
Ändra följande värden i metoden
Main
:- cb.DataSource
- cb. UserID
- cb.Lösenord
- cb.InitialCatalog
Kontrollera att sammansättningen System.Data.dll refereras till. Kontrollera genom att expandera noden Referenser i Solution Explorer-fönstret.
Om du vill skapa och köra programmet från Visual Studio väljer du knappen Starta. Rapportutdata visas i ett programfönster, men GUID-värdena varierar mellan testkörningar.
================================= 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 hjälp av 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 T-SQL-instruktioner
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
}
Tips
För att lära dig mer om hur du skriver SQL-frågor, besök Handledning: Skriv Transact-SQL-instruktioner.
Relaterat innehåll
- Distribuera Azure SQL Database kostnadsfritt
- Vad är nytt i Azure SQL Database?
- Konfigurera och hantera innehållsreferens – Azure SQL Database-
- Planera och hantera kostnader för Azure SQL Database
Nästa steg
Gå vidare till nästa handledning för att lära dig datamigrering.