Tutorial: Criar um banco de dados relacional no Banco de Dados SQL do Azure C# e ADO.NET
Aplica-se a:Banco de Dados SQL do Azure
O Banco de Dados SQL do Azure é um banco de dados relacional como serviço (DBaaS) no Microsoft Cloud (Azure). Neste tutorial, vai aprender a utilizar o portal do Azure e o ADO.NET com o Visual Studio para:
- Criar um banco de dados usando o portal do Azure
- Configurar uma regra de firewall IP no nível do servidor usando o portal do Azure
- Ligar à base de dados com o ADO.NET e o Visual Studio
- Criar tabelas com o ADO.NET
- Inserir, atualizar e eliminar os dados com o ADO.NET
- Consultar dados com o ADO.NET
Gorjeta
Este módulo gratuito do Learn mostra como desenvolver e configurar um aplicativo ASP.NET que consulta um Banco de Dados SQL do Azure, incluindo a criação de um banco de dados simples.
Pré-requisitos
- Uma instalação do Visual Studio 2019 ou posterior.
- Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.
- Se você ainda não tiver um Banco de Dados SQL do Azure criado, visite Guia de início rápido: criar um único banco de dados. Procure a opção de usar sua oferta para experimentar o Banco de Dados SQL do Azure gratuitamente (visualização).
Inicie sessão no portal do Azure
Inicie sessão no portal do Azure.
Criar uma regra de firewall IP no nível do servidor
O Banco de dados SQL cria um firewall IP no nível do servidor. Esse firewall impede que aplicativos e ferramentas externos se conectem ao servidor e a quaisquer bancos de dados no servidor, a menos que uma regra de firewall permita seu IP através do firewall. Para habilitar a conectividade externa ao seu banco de dados, você deve primeiro adicionar uma regra de firewall IP para seu endereço IP (ou intervalo de endereços IP). Siga estas etapas para criar uma regra de firewall IP no nível do servidor.
Importante
A Base de Dados SQL comunica através da porta 1433. Se estiver a tentar ligar-se a este serviço a partir de uma rede empresarial, o tráfego de saída através da porta 1433 poderá não ser permitido pela firewall da rede. Em caso afirmativo, você não poderá se conectar ao banco de dados, a menos que o administrador abra a porta 1433.
Após a conclusão da implantação, selecione bancos de dados SQL no menu à esquerda e, em seguida, selecione yourDatabase na página Bancos de dados SQL. A página de visão geral do banco de dados é aberta, mostrando o nome do servidor totalmente qualificado (como yourserver.database.windows.net) e fornece opções para configuração adicional.
Copie esse nome de servidor totalmente qualificado para uso para se conectar ao servidor e aos bancos de dados do SQL Server Management Studio.
Selecione Rede em Configurações. Escolha a guia Acesso público e, em seguida, selecione Redes selecionadas em Acesso à rede pública para exibir a seção Regras de firewall.
Selecione Adicionar IP do cliente na barra de ferramentas para adicionar seu endereço IP atual a uma nova regra de firewall IP . Uma regra de firewall IP pode abrir a porta 1433 para um único endereço IP ou um intervalo de endereços IP.
Selecione Guardar. Uma regra de firewall IP no nível do servidor é criada para o seu endereço IP atual abrindo a porta 1433 no servidor.
Selecione OK e feche a página Configurações do firewall .
O seu endereço IP pode agora passar através da firewall IP. Agora você pode se conectar ao seu banco de dados usando o SQL Server Management Studio ou outra ferramenta de sua escolha. Certifique-se de usar a conta de administrador do servidor que você criou anteriormente.
Importante
Por padrão, o acesso por meio do firewall IP do Banco de Dados SQL está habilitado para todos os serviços do Azure. Selecione DESATIVADO nesta página para desabilitar o acesso a todos os serviços do Azure.
Exemplo de programa em C#
As próximas seções deste artigo apresentam um programa C# que usa ADO.NET para enviar instruções Transact-SQL (T-SQL) para o Banco de dados SQL. O programa C# demonstra as seguintes ações:
- Conectar-se ao Banco de Dados SQL usando ADO.NET
- Métodos que retornam instruções T-SQL
- Criar tabelas
- Preencher tabelas com dados
- Atualizar, excluir e selecionar dados
- Enviar T-SQL para o banco de dados
Diagrama de Relacionamento de Entidade (ERD)
As CREATE TABLE
instruções envolvem a palavra-chave REFERENCES para criar uma relação de chave estrangeira (FK) entre duas tabelas. Se você estiver usando tempdb, comente a --REFERENCES
palavra-chave usando um par de traços à esquerda.
O ERD exibe a relação entre as duas tabelas. Os valores na coluna filho tabEmployee.DepartmentCode são limitados aos valores da coluna pai tabDepartment.DepartmentCode.
Nota
Você tem a opção de editar o T-SQL para adicionar uma entrelinha #
aos nomes das tabelas, o que as cria como tabelas temporárias no tempdb. Isso é útil para fins de demonstração, quando nenhum banco de dados de teste está disponível. Qualquer referência a chaves estrangeiras não é imposta durante o seu uso e as tabelas temporárias são excluídas automaticamente quando a conexão é fechada após a conclusão da execução do programa.
Para compilar e executar
O programa C# é logicamente um arquivo .cs, e é fisicamente dividido em vários blocos de código, para tornar cada bloco mais fácil de entender. Para compilar e executar o programa, execute as seguintes etapas:
Crie um projeto C# no Visual Studio. O tipo de projeto deve ser um Console, encontrado em Templates>Visual C#>Windows Desktop>Console App (.NET Framework).
No arquivo Program.cs, substitua as linhas iniciais do código pelas seguintes etapas:
Copie e cole os seguintes blocos de código, na mesma sequência em que são apresentados, consulte Conectar ao banco de dados, Gerar T-SQL e Enviar ao banco de dados.
Altere os seguintes valores no
Main
método:- cb. Fonte de dados
- cb. ID de utilizador
- cb. Palavra-passe
- cb. Catálogo Inicial
Verifique se o assembly System.Data.dll está referenciado. Para verificar, expanda o nó Referências no painel Gerenciador de Soluções.
Para criar e executar o programa a partir do Visual Studio, selecione o botão Iniciar . A saída do relatório é exibida em uma janela do programa, embora os valores de GUID variem entre as execuções de teste.
================================= 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...
Conectar-se ao Banco de Dados SQL usando 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();
}
Métodos que retornam instruções 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;
";
}
Enviar T-SQL para o banco de dados
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
}
Gorjeta
Para saber mais sobre como escrever consultas SQL, visite Tutorial: Escrever instruções Transact-SQL.
Conteúdos relacionados
- Experimente a Base de Dados SQL do Azure gratuitamente (pré-visualização)
- O que há de novo no Banco de Dados SQL do Azure?
- Configurar e gerenciar referência de conteúdo - Banco de Dados SQL do Azure
- Planear e gerir os custos da Base de Dados SQL do Azure
Próximo passo
Avance para o próximo tutorial para saber mais sobre a migração de dados.