C# - Classe para MySql
Tecnologia da Informação

C# - Classe para MySql


Já pensou em usar MySql sem nenhuma string de conexão?
Existem algumas ferramentas como o NHibernate que possibilitam essa façanha.

Mas, nada é tão simples quanto uma Classe.
Vou mostrar hoje uma classe (na verdade são duas que operam juntas) de autoria própria, que auxiliam no uso de Bancos de Dados MySql.

Elas transformam os principais comandos de MySql em métodos de uma classe.

Sem mais detalhes, eis as classes já explicadas com comentários.

Utilização das Classes
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace MySql_Connector
{
public partial class Form1 : Form
{
static Connection connection = new Connection(); //Declaração da variável aqui, para poder ser usada nos outros métodos
Action action = new Action(ref connection); //Toda vez que algum parâmetro de connection mudar, action também será alterado

public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
try
{
//Conecta sem nessecidade de um Banco de Dados
connection.Server = "localhost";
connection.Id = "user"; //Voce deve colocar seu usário
connection.Password = "password"; //Voce deve colocar sua senha
connection.Connect(); //Está conectado apenas ao MySql, sem Banco de Dados definido
updateDatabases(); //Atualiza a ComboBox para ver os Bancos de Dados existentes
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
throw;
}
}

public void button7_Click(object sender, EventArgs e)
{
//Cria um DB e reconecta com ele
action.CreateDatabase("Banco");
connection.Database = "Banco"; //Todas as ações usarão esse DB
connection.Connect();

//Cria uma Tabela
connection.Table = "Tabela"; //Todas as ações usarão essa Tabela
string[] colunas = new string[1];
colunas[0] = "nome";
//action.CreateTable(colunas);

//Insere uma linha
string[] linha = new string[1];
linha[0] = "matheus";
action.InsertRow(linha);

//Remove uma linha
action.RemoveRow(1);

//Atualiza uma lista
action.UpdateRow(3, linha);

//Acha o Id a partir de algum campo
DataTable table = action.GetRows("nome", "lucas");
int id = Convert.ToInt32(table.Rows[0][0].ToString());

MessageBox.Show("OK");
}

void updateDatabases()
{
cbDatabases.Items.Clear();
cbDatabases.Items.AddRange(action.GetDatabases());
}
void updateTables()
{
cbTables.Items.Clear();
cbTables.Items.AddRange(action.GetTables());
}
private void cbDatabases_SelectedIndexChanged(object sender, EventArgs e)
{
connection.Database = cbDatabases.SelectedItem.ToString();
updateTables();
}
private void cbTables_SelectedIndexChanged(object sender, EventArgs e)
{
connection.Table = cbTables.SelectedItem.ToString();
dgv.DataSource = action.GetRows();
}

private void btnDatabase_Click(object sender, EventArgs e)
{
//Cria um banco de dados
action.CreateDatabase(txtDatabase.Text);
connection.Database = txtDatabase.Text;
txtDatabase.Clear();
updateDatabases();
MessageBox.Show("Banco de dados criado com sucesso!", "Banco de Dados");
}
private void btnTable_Click(object sender, EventArgs e)
{
//Cria uma tabela
string colunasLinha = txtColunas.Text;
string[] colunas = colunasLinha.Split('|'); //Divide a string em um vetor de strings com cada coluna
// Não esqueça de usar aspas simples no caractere pois ele é um char e nao uma string
action.CreateTable(connection.Database, txtTable.Text, colunas);
txtTable.Clear();
txtColunas.Clear();
updateTables();
MessageBox.Show("Tabela criada com sucesso!", "Tabela");
}
private void btnInsert_Click(object sender, EventArgs e)
{
//Insere um linha ao final da tabela
string colunasLinha = txtInsert.Text;
string[] colunas = colunasLinha.Split('|');
action.InsertRow(colunas);
txtInsert.Clear();
updateTables();
MessageBox.Show("Linha inserida com sucesso!", "Inserir linha");
}
private void btnRemove_Click(object sender, EventArgs e)
{
//Remove uma linha de determinada Id
action.RemoveRow(Convert.ToInt32(txtRemove.Text));
txtRemove.Clear();
updateTables();
MessageBox.Show("Linha removida com sucesso!", "Remover linha");
}
private void btnUpdate_Click(object sender, EventArgs e)
{
//Atualiza um linha de determinada Id com valores inseridos,
//é nescessário inserir todos os valores, mesmo que alguns continuem iguais
string colunasLinha = txtValores.Text;
string[] colunas = colunasLinha.Split('|');
action.UpdateRow(Convert.ToInt32(txtId.Text) , colunas);
txtValores.Clear();
txtId.Clear();
updateTables();
MessageBox.Show("Linha atualizada com sucesso!", "Atualizar linha");
}


}
}


Classe Connection.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MySql.Data.MySqlClient;

namespace MySql_Connector
{
class Connection
{
static string server;
static string id;
static string password;
static string database = "";
static string table = "";
static MySqlConnection sqlConnection;

public Connection() {}

public string Server
{
get { return server; }
set { server = value; }
}

public string Id
{
get { return id; }
set { id = value; }
}

public string Password
{
get { return password; }
set { password = value; }
}

public string Database
{
get { return database; }
set { database = value; }
}

public string Table
{
get { return table; }
set { table = value; }
}

public MySqlConnection SQLConnection
{
get { return sqlConnection; }
//set { sqlConnection = value; }
}

public void LoadFromFile()
{
//le os dados de um arquivo
}

public void Connect()
{
if (database == "")
{
sqlConnection = new MySqlConnection("server=" + server + ";uid=" + id + ";pwd=" + password);
}
else
{
sqlConnection = new MySqlConnection("server=" + server + ";database=" + database + ";uid=" + id + ";pwd=" + password);
}
sqlConnection.Open();
}
}
}


Classe Action.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MySql.Data.MySqlClient;
using System.Data;
using System.Windows.Forms;

namespace MySql_Connector
{
class Action
{
public Connection myConnection;

public Action(ref Connection connection)
{
myConnection = connection; // Passa connection para myConnection
// A idéia é quando algum atributo de connection mudar, o atributo de myConnection mudar também
}

private DataTable MySqlGetCommand(string SQLStatement)
{
DataTable dataTable = new DataTable();

if (myConnection.SQLConnection.State == ConnectionState.Open)
{
MySqlCommand cmd = myConnection.SQLConnection.CreateCommand();
cmd.CommandText = SQLStatement;
MySqlDataAdapter Adapter;
Adapter = new MySqlDataAdapter(cmd);
Adapter.Fill(dataTable);
for (int i = 0; i < dataTable.Columns.Count; i++)
{
dataTable.Columns[i].ColumnName = FixString(dataTable.Columns[i].ColumnName);
}
}
return dataTable;
}
private string FixString(string input)
{
string output = "";
output = Encoding.UTF8.GetString(Encoding.GetEncoding("latin1").GetBytes(input));
return output;
}
private void MySqlSetCommand(string SQLStatement)
{
MySqlCommand cmd = myConnection.SQLConnection.CreateCommand();
cmd.CommandText = SQLStatement;
cmd.CommandType = CommandType.Text;
cmd.Connection = myConnection.SQLConnection;
cmd.ExecuteNonQuery();
}

public void CreateDatabase(string databaseName)
{
MySqlSetCommand("create database if not exists `" + databaseName + "`");
}
public void CreateTable(string database, string table, string[] columns)
{
string values = "";
for (int i = 0; i <= columns.Length - 1; i++)
{
values += ", `" + columns[i] + "` text not null";
}
MySqlSetCommand("create table if not exists `" + database + "`.`" + table +
"` (`Id` int not null auto_increment" + values + ", primary key (`Id`)) " +
" default character set latin1 collate latin1_general_cs");
}
public void InsertRow(string[] cells)
{
string values = "";
for (int i = 0; i <= cells.Length - 1; i++)
{
values += ", '" + cells[i] + "'";
}
MySqlSetCommand("insert into `" + myConnection.Database + "`.`" + myConnection.Table + "`" +
" values ('' "+ values +")");
}
public void RemoveRow(int id)
{
MySqlSetCommand("delete from `" + myConnection.Database + "`.`" + myConnection.Table + "` where Id='" + id + "'");
}
public void UpdateRow(int id, string[] cells)
{
string values = "";
for (int i = 0; i <= cells.Length - 1; i++)
{
values += ", '" + cells[i] + "'";
}
MySqlSetCommand("replace into `" + myConnection.Database + "`.`" + myConnection.Table + "`" +
" values ('" + id + "' " + values + ")");
}
public DataTable GetRows(string columnName = "", string value = "")
{
DataTable table = new DataTable();

if (columnName == "" && value == "")
{
table = MySqlGetCommand("select * from `" + myConnection.Database + "`.`" + myConnection.Table + "` where 1");
}
else
{
table = MySqlGetCommand("select * from `" + myConnection.Database + "`.`" + myConnection.Table + "` where " + columnName + "='" + value + "'");
}
return table;
}
public string[] GetDatabases()
{
DataTable table = MySqlGetCommand("show databases");
string[] answer = new string[table.Rows.Count];

for (int i = 0; i < table.Rows.Count; i++)
{
answer[i] = table.Rows[i][0].ToString();
}
return answer;

}
public string[] GetTables()
{
DataTable table = MySqlGetCommand("show tables from `" + myConnection.Database + "`");
string[] answer = new string[table.Rows.Count];
for (int i = 0; i < table.Rows.Count; i++)
{
answer[i] = table.Rows[i][0].ToString();
}
return answer;
}
}
}


E claro, essas classes também servem para quem quer aprender o funcionamento básico das strings de conexão com MySql.

Estas classes são open source, ou seja, você pode usá-las livremente em seus códigos.

Clique aqui para fazer download dos códigos fonte. (Você deve ter o  Visual Studio instalado)

Qualquer dúvida entre em contato conosco no menu Contato que nós teremos prazer em ajudá-lo.

Simples Assim



loading...

- Postgresql - Função Lpad
Neste artigo, vamos mostrar 2 exemplos, da utilização da função LPAD.   Utilizamos a função LPAD para completar uma string do lado esquerdo com determinado(s) caractere(s). O script dos exemplos, também estão no GitHub. SINTAXE LPAD (string,...

- Postgresql - Criar Um Banco De Dados Parte I
Vamos apresentar alguns exemplos da criação de um banco de dados no postgresql. Podemos criar um banco das seguintes formas: linha de comando via sql;linha de comando via utilitário createdb. Veja a segunda parte do artigo; através de interface gráfica....

- Postgresql - Função Char_length E Length
Este artigo apresenta três exemplos de duas funções no PostgreSql:char_length ou character_length: utilizaçao desta função na manipulação de string;length: utilizaçao desta função na manipulação de string;length: utilizaçao...

- [oracle/mysql] Criando Um Dblink Entre Oracle E Mysql:
Passo 1: No servidor MySQL crie um usuário com os privilégios necessários de acesso ao database que será feito o dblink: Exemplo: mysql> grant all privileges on db_mysql.* to 'usuario'@'192.168.%' identified by 'senha';...

- [mysql] Charset
Para ver qual o charset utilizado no database:  mysql> show create database <nomedatabase>; Alterar charset de um database: mysql> ALTER DATABASE <nome_database> DEFAULT CHARACTER SET <charset> COLLATE <collate>; Alterar...



Tecnologia da Informação








.