Operações CRUD
SQL Server
Vamos mostrar como implementar operações CRUD (Create, Read, Update, Delete) usando ADO.NET em C# com SQL Server. Os exemplos são simples e podem ser adaptados para aplicações console, desktop ou web.
Pré-requisitos
- Visual Studio instalado
- SQL Server disponível
- Biblioteca
System.Data.SqlClient
referenciada no projeto
1. Estrutura do Banco de Dados
Crie uma tabela de exemplo chamada Contactos
:
CREATE TABLE Contactos (
Id INT IDENTITY PRIMARY KEY,
Nome NVARCHAR(100),
Email NVARCHAR(100)
)
2. Configuração da String de Conexão
Adicione a string de conexão no seu código:
string connectionString = "Data Source=SEU_SERVIDOR;Initial Catalog=SUA_BASE_DADOS;Integrated Security=True";
3. Operações CRUD
a) Create (Inserir)
using (SqlConnection conn = new SqlConnection(connectionString))
{
string sql = "INSERT INTO Contactos (Nome, Email) VALUES (@Nome, @Email)";
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.AddWithValue("@Nome", "João da Silva");
cmd.Parameters.AddWithValue("@Email", "joao@email.com");
conn.Open();
cmd.ExecuteNonQuery();
}
b) Read (Consultar)
using (SqlConnection conn = new SqlConnection(connectionString))
{
string sql = "SELECT * FROM Contactos";
SqlCommand cmd = new SqlCommand(sql, conn);
conn.Open();
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
Console.WriteLine($"Id: {reader["Id"]}, Nome: {reader["Nome"]}, Email: {reader["Email"]}");
}
}
c) Update (Atualizar)
using (SqlConnection conn = new SqlConnection(connectionString))
{
string sql = "UPDATE Contactos SET Nome = @Nome, Email = @Email WHERE Id = @Id";
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.AddWithValue("@Nome", "João Atualizado");
cmd.Parameters.AddWithValue("@Email", "joao.novo@email.com");
cmd.Parameters.AddWithValue("@Id", 1);
conn.Open();
cmd.ExecuteNonQuery();
}
d) Delete (Excluir)
using (SqlConnection conn = new SqlConnection(connectionString))
{
string sql = "DELETE FROM Contactos WHERE Id = @Id";
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.AddWithValue("@Id", 1);
conn.Open();
cmd.ExecuteNonQuery();
}
4. Observações Importantes
- Sempre feche a conexão após o uso (o bloco
using
faz isso automaticamente). - Utilize parâmetros em comandos SQL para evitar SQL Injection.
- Trate exceções usando blocos
try-catch
para maior segurança e controle de erros.
Resumo das Operações
Operação | SQL Utilizado | Método ADO.NET |
---|---|---|
Create | INSERT INTO Contactos (Nome, Email) VALUES… | ExecuteNonQuery |
Read | SELECT * FROM Contactos | ExecuteReader |
Update | UPDATE Contactos SET Nome = …, Email = … WHERE Id | ExecuteNonQuery |
Delete | DELETE FROM Contactos WHERE Id = … | ExecuteNonQuery |
Esses exemplos cobrem o básico do CRUD com ADO.NET em C#. Para projetos maiores, recomenda-se criar uma camada de acesso a dados (DAL) e utilizar stored procedures para maior organização e segurança.
MySql
Vamos apresentar exemplos práticos de operações CRUD (Create, Read, Update, Delete) usando ADO.NET em C# para uma base de dados MySQL,.
Pré-requisitos
- MySQL Server instalado
- MySQL Connector/NET (pacote NuGet:
MySql.Data
) - Visual Studio ou IDE compatível
1. Estrutura da Base de Dados
Crie a base de dados e a tabela de exemplo:
CREATE DATABASE IF NOT EXISTS PessoasDb;
USE PessoasDb;
CREATE TABLE IF NOT EXISTS Contactos (
id INT AUTO_INCREMENT PRIMARY KEY,
nome VARCHAR(50),
email VARCHAR(100)
);
2. String de Conexão
No seu projeto C#, utilize a seguinte string de conexão:
string connectionString = "server=localhost;uid=root;pwd=SUASENHA;database=PessoasDb;";
Altere SUASENHA
para a senha do seu utilizador root ou outro utilizador do MySQL.
3. Exemplos de Operações CRUD
Adicione o namespace:
using MySql.Data.MySqlClient;
a) Create (Inserir Registro)
using (MySqlConnection conn = new MySqlConnection(connectionString))
{
string sql = "INSERT INTO Contactos (nome, email) VALUES (@nome, @email)";
MySqlCommand cmd = new MySqlCommand(sql, conn);
cmd.Parameters.AddWithValue("@nome", "Maria Oliveira");
cmd.Parameters.AddWithValue("@email", "maria@email.com");
conn.Open();
cmd.ExecuteNonQuery();
}
b) Read (Consultar Registros)
using (MySqlConnection conn = new MySqlConnection(connectionString))
{
string sql = "SELECT * FROM Contactos";
MySqlCommand cmd = new MySqlCommand(sql, conn);
conn.Open();
MySqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
Console.WriteLine($"Id: {reader["id"]}, Nome: {reader["nome"]}, Email: {reader["email"]}");
}
}
c) Update (Atualizar Registro)
using (MySqlConnection conn = new MySqlConnection(connectionString))
{
string sql = "UPDATE Contactos SET nome = @nome, email = @email WHERE id = @id";
MySqlCommand cmd = new MySqlCommand(sql, conn);
cmd.Parameters.AddWithValue("@nome", "Maria Atualizada");
cmd.Parameters.AddWithValue("@email", "nova_maria@email.com");
cmd.Parameters.AddWithValue("@id", 1);
conn.Open();
cmd.ExecuteNonQuery();
}
d) Delete (Excluir Registro)
using (MySqlConnection conn = new MySqlConnection(connectionString))
{
string sql = "DELETE FROM Contactos WHERE id = @id";
MySqlCommand cmd = new MySqlCommand(sql, conn);
cmd.Parameters.AddWithValue("@id", 1);
conn.Open();
cmd.ExecuteNonQuery();
}
4. Observações Importantes
- Utilize sempre parâmetros para evitar SQL Injection.
- O bloco
using
garante o fecho da conexão. - Trate exceções com
try-catch
para maior robustez. - Para projetos maiores, considere separar o acesso a dados em uma camada específica (DAL).
Resumo das Operações
Operação | SQL Utilizado | Método ADO.NET |
---|---|---|
Create | INSERT INTO Contactos (nome, email) VALUES… | ExecuteNonQuery |
Read | SELECT * FROM Contactos | ExecuteReader |
Update | UPDATE Contactos SET nome = …, email = … WHERE | ExecuteNonQuery |
Delete | DELETE FROM Contactos WHERE id = … | ExecuteNonQuery |
PostgresSQL
Este tutorial mostra como realizar operações CRUD (Create, Read, Update, Delete) numa base PostgreSQL usando ADO.NET em C# com o provedor Npgsql, que é o driver oficial para PostgreSQL em .NET.
Pré-requisitos
- PostgreSQL instalado e rodando
- Projeto C# (Console, WinForms, Web, etc.)
- Pacote NuGet
Npgsql
instalado
1. Estrutura da Tabela de Exemplo
Crie uma tabela simples chamada contactos
:
CREATE TABLE contactos (
id SERIAL PRIMARY KEY,
nome VARCHAR(100),
email VARCHAR(100)
);
2. String de Conexão
No seu código C#, defina a string de conexão:
string connectionString = "Host=localhost;Port=5432;Username=seu_utilizador;Password=sua_senha;Database=sua_base_dados";
Altere os valores conforme o seu ambiente.
3. Exemplos de Operações CRUD
Adicione o namespace:
using Npgsql;
a) Create (Inserir)
using (var conn = new NpgsqlConnection(connectionString))
{
conn.Open();
var sql = "INSERT INTO contactos (nome, email) VALUES (@nome, @email)";
using (var cmd = new NpgsqlCommand(sql, conn))
{
cmd.Parameters.AddWithValue("nome", "João da Silva");
cmd.Parameters.AddWithValue("email", "joao@email.com");
cmd.ExecuteNonQuery();
}
}
b) Read (Consultar)
using (var conn = new NpgsqlConnection(connectionString))
{
conn.Open();
var sql = "SELECT id, nome, email FROM contactos";
using (var cmd = new NpgsqlCommand(sql, conn))
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
Console.WriteLine($"Id: {reader.GetInt32(0)}, Nome: {reader.GetString(1)}, Email: {reader.GetString(2)}");
}
}
}
c) Update (Atualizar)
using (var conn = new NpgsqlConnection(connectionString))
{
conn.Open();
var sql = "UPDATE contactos SET nome = @nome, email = @email WHERE id = @id";
using (var cmd = new NpgsqlCommand(sql, conn))
{
cmd.Parameters.AddWithValue("nome", "João Atualizado");
cmd.Parameters.AddWithValue("email", "novo@email.com");
cmd.Parameters.AddWithValue("id", 1);
cmd.ExecuteNonQuery();
}
}
d) Delete (Excluir)
using (var conn = new NpgsqlConnection(connectionString))
{
conn.Open();
var sql = "DELETE FROM contactos WHERE id = @id";
using (var cmd = new NpgsqlCommand(sql, conn))
{
cmd.Parameters.AddWithValue("id", 1);
cmd.ExecuteNonQuery();
}
}
4. Boas Práticas
- Sempre utilize parâmetros para evitar SQL Injection.
- Use o bloco
using
para garantir o fechamento da conexão. - Trate exceções com
try-catch
conforme necessário. - Para projetos maiores, crie uma camada de acesso a dados (DAL) para organizar o código3.
Resumo das Operações
Operação | SQL Utilizado | Método ADO.NET |
---|---|---|
Create | INSERT INTO contactos (nome, email) VALUES… | ExecuteNonQuery |
Read | SELECT id, nome, email FROM contactos | ExecuteReader |
Update | UPDATE contactos SET nome = …, email = … WHERE | ExecuteNonQuery |
Delete | DELETE FROM contactos WHERE id = … | ExecuteNonQuery |
Oracle
Vamos apresentar exemplos práticos de como realizar operações CRUD (Create, Read, Update, Delete) utilizando ADO.NET em C# com base de dados Oracle, usando o provider oficial Oracle Data Provider for .NET (ODP.NET).
Pré-requisitos
- Oracle Database instalado e rodando
- Provider ODP.NET instalado e referenciado no projeto (
Oracle.DataAccess.Client
ouOracle.ManagedDataAccess.Client
) - Visual Studio ou IDE compatível
1. Estrutura da Tabela de Exemplo
Crie uma tabela simples chamada Cliente
:
CREATE TABLE Cliente (
Id NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
Nome VARCHAR2(100)
);
2. String de Conexão
No seu código C#, defina a string de conexão:
string connectionString = "Data Source=dbserver;User Id=dbuser;Password=dbpassword;";
Altere os valores conforme seu ambiente Oracle.
3. Exemplos de Operações CRUD
Adicione o namespace:
using Oracle.DataAccess.Client; // ou Oracle.ManagedDataAccess.Client, dependendo do provider
a) Create (Inserir)
using (var conn = new OracleConnection(connectionString))
{
conn.Open();
using (var cmd = new OracleCommand())
{
cmd.Connection = conn;
cmd.CommandText = "INSERT INTO Cliente (Nome) VALUES (:nome)";
cmd.Parameters.Add(new OracleParameter(":nome", "Novo Cliente"));
cmd.ExecuteNonQuery();
}
}
Use parâmetros sempre que possível para evitar SQL Injection.
b) Read (Consultar)
using (var conn = new OracleConnection(connectionString))
{
conn.Open();
using (var cmd = new OracleCommand())
{
cmd.Connection = conn;
cmd.CommandText = "SELECT Id, Nome FROM Cliente";
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
Console.WriteLine($"Id: {reader["Id"]}, Nome: {reader["Nome"]}");
}
}
}
}
c) Update (Atualizar)
using (var conn = new OracleConnection(connectionString))
{
conn.Open();
using (var cmd = new OracleCommand())
{
cmd.Connection = conn;
cmd.CommandText = "UPDATE Cliente SET Nome = :nome WHERE Id = :id";
cmd.Parameters.Add(new OracleParameter(":nome", "Nome Atualizado"));
cmd.Parameters.Add(new OracleParameter(":id", 1));
cmd.ExecuteNonQuery();
}
}
d) Delete (Excluir)
using (var conn = new OracleConnection(connectionString))
{
conn.Open();
using (var cmd = new OracleCommand())
{
cmd.Connection = conn;
cmd.CommandText = "DELETE FROM Cliente WHERE Id = :id";
cmd.Parameters.Add(new OracleParameter(":id", 1));
cmd.ExecuteNonQuery();
}
}
4. Boas Práticas
- Utilize parâmetros para evitar SQL Injection.
- Use sempre o bloco
using
para garantir o fechamento da conexão. - Trate exceções com
try-catch
conforme necessário. - Para projetos maiores, crie uma camada de acesso a dados (DAL) para organizar o código1.
Resumo das Operações
Operação | SQL Utilizado | Método ADO.NET |
---|---|---|
Create | INSERT INTO Cliente (Nome) VALUES (:nome) | ExecuteNonQuery |
Read | SELECT Id, Nome FROM Cliente | ExecuteReader |
Update | UPDATE Cliente SET Nome = :nome WHERE Id = :id | ExecuteNonQuery |
Delete | DELETE FROM Cliente WHERE Id = :id | ExecuteNonQuery |