Esercitazione: Progettare di un database relazionale nel database SQL di Azure con C# e ADO.NET
Si applica a: Database SQL di Azure
Il database SQL di Azure è un database relazionale distribuito come servizio in Microsoft Cloud (Azure). In questa esercitazione viene illustrato come usare il portale di Azure e ADO.NET con Visual Studio per eseguire queste operazioni:
- Creare un database usando il portale di Azure
- Configurare una regola del firewall IP a livello di server con il portale di Azure
- Connettersi al database con ADO.NET e Visual Studio
- Creare tabelle con ADO.NET
- Inserire, aggiornare ed eliminare dati con ADO.NET
- Eseguire query sui dati con ADO.NET
Suggerimento
Questo modulo gratuito di Learn contiene informazioni su come sviluppare e configurare un'applicazione ASP.NET che esegue query su un database SQL di Azure, inclusa la creazione di un database semplice.
Prerequisiti
- Installazione di Visual Studio 2019 o versioni successive.
- Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.
- Se non è già stato creato un database SQL di Azure, consultare Avvio rapido: creare un database singolo. Cercare l'opzione per usare l'offerta per provare il database SQL di Azure in modo gratuito (anteprima).
Accedere al portale di Azure
Accedere al portale di Azure.
Creare una regola del firewall IP a livello di server
Database SQL crea un firewall per gli indirizzi IP a livello di server. Questo impedisce alle applicazioni e agli strumenti esterni di connettersi al server e ai database nel server a meno che una regola del firewall non consenta allo specifico indirizzo IP di superare il firewall. Per abilitare la connettività esterna al database, è prima di tutto necessario aggiungere una regola del firewall IP per l'indirizzo IP o l'intervallo di indirizzi IP. Per creare una regola del firewall IP a livello di server, seguire questa procedura.
Importante
Il database SQL comunica attraverso la porta 1433. Se si intende connettersi a questo servizio da una rete aziendale, il firewall della rete potrebbe non consentire il traffico in uscita sulla porta 1433. In questo caso, non è possibile connettersi al database a meno che l'amministratore non apra la porta 1433.
Al termine della distribuzione, selezinare Database SQL nel menu a sinistra e quindi selezionare yourDatabase nella pagina Database SQL. Verrà visualizzata la pagina di panoramica del database, che mostra il nome server completo, ad esempio yourserver.database.windows.net, e offre opzioni per operazioni di configurazione aggiuntive.
Copiare il nome completo del server per usarlo per la connessione al server e ai database da SQL Server Management Studio.
Nel portale di Azure, passare al server logico SQL server del database SQL di Azure. Il modo più semplice consiste nel selezionare il valore nome server nella pagina database SQL.
Nel menu delle risorse, alla voce Impostazioni selezionare Networking.
Scegliere la scheda Accesso pubblico, quindi selezionare Reti selezionate in Accesso alla rete pubblica.
Scorrere verso il basso fino alla sezione delle regole del firewall.
Selezionare Aggiungi indirizzo IPv4 client sulla barra degli strumenti per aggiungere l'indirizzo IP corrente a una nuova regola del firewall IP. Una regola del firewall per gli indirizzi IP può aprire la porta 1433 per un singolo indirizzo IP o un intervallo di indirizzi IP.
Seleziona Salva. Viene creata una regola del firewall IP a livello di server per l'indirizzo IP corrente, che apre la porta 1433 nel server.
Selezionare OK e quindi chiudere la pagina Impostazioni del firewall.
L'indirizzo IP può ora superare il firewall per gli indirizzi IP. È quindi possibile connettersi al database usando SQL Server Management Studio o un altro strumento di propria scelta. Assicurarsi di usare l'account amministratore del server creato in precedenza.
Importante
Per impostazione predefinita, l'accesso attraverso il firewall per gli indirizzi IP di Database SQL è abilitato per tutti i servizi di Azure. Selezionare NO in questa pagina per disabilitare l’accesso a tutti i servizi di Azure.
Esempio di programma C#
Le sezioni successive di questo articolo presentano un programma C# che usa ADO.NET per inviare istruzioni Transact-SQL (T-SQL) al database SQL. Il programma C# dimostra le azioni seguenti:
- Connessione al database SQL con ADO.NET
- Metodi che restituiscono istruzioni T-SQL
- Creare tabelle
- Popolare le tabelle con dati
- Aggiornare, eliminare e selezionare i dati
- Inviare T-SQL al database
Diagramma entità-relazione
Le istruzioni CREATE TABLE
usano la parola chiave REFERENCES per creare una relazione chiavi esterne tra le due tabelle. Se si usa tempdb, impostare come commento la parola chiave --REFERENCES
usando una coppia di trattini iniziali.
Il diagramma entità-relazione mostra la relazione tra le due tabelle. I valori nella colonna tabEmployee.DepartmentCode figlio sono limitati ai valori presenti nella colonna tabDepartment.DepartmentCode padre.
Nota
È possibile modificare il codice T-SQL per aggiungere un carattere #
davanti ai nomi di tabella, in modo da crearle come tabelle temporanee in tempdb. Ciò risulta utile per finalità dimostrative, quando non sono disponibili database di test. Qualsiasi riferimento alle chiavi esterne non viene applicato durante l'uso e le tabelle temporanee vengono eliminate automaticamente alla chiusura della connessione dopo che il programma termina l'esecuzione.
Per la compilazione e l'esecuzione
Il programma C# è logicamente un unico file con estensione cs ed è suddiviso fisicamente in diversi blocchi di codice, in modo da semplificare la comprensione di ogni blocco. Per compilare ed eseguire il programma, seguire questa procedura:
Creare un progetto C# in Visual Studio. Il tipo di progetto deve essere un'applicazione console, da un elemento simile alla gerarchia seguente: Modelli>Visual C#>Desktop classico di Windows>App console (.NET Framework).
Nel file Program.cs sostituire le righe iniziali del codice con i passaggi seguenti:
Copiare e incollare i blocchi di codice seguenti nella stessa sequenza in cui sono visualizzati; vedere Connettersi al database, Generare T-SQL e Inviare al database.
Modificare i valori seguenti nel metodo
Main
:- cb.DataSource
- cb.UserID
- cb.Password
- cb.InitialCatalog
Verificare che sia presente un riferimento all'assembly System.Data.dll. Per la verifica, espandere il nodo Riferimenti nel riquadro Esplora soluzioni.
Per compilare ed eseguire il programma da Visual Studio, selezionare il pulsante Start. L'output del report viene visualizzato in una finestra del programma, anche se i valori GUID variano tra le esecuzioni dei test.
================================= 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...
Connessione al database SQL con 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();
}
Metodi che restituiscono istruzioni 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;
";
}
Inviare T-SQL al 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
}
Suggerimento
Per altre informazioni sulla scrittura di query SQL, consultare Esercitazione: Scrivere istruzioni Transact-SQL.
Contenuto correlato
- Provare il database SQL di Azure in modo gratuito (anteprima)
- Novità del database SQL di Azure
- Configurare e gestire i riferimenti al contenuto: database SQL di Azure
- Pianificare e gestire i costi per il database SQL di Azure
Passaggio successivo
Passare all'esercitazione successiva per informazioni sulla migrazione di dati.