No Formulário Dinâmico, apenas uma Conexão de Banco de Dados pode ser selecionada para ser usada nas Fontes de Dados e instruções dos Procedimentos. No entanto, em alguns casos pode ser necessário executar algum Comando SQL em outro banco de dados.
Neste tópico vamos descobrir como executar um Comando SQL em outro banco de dados usando a linguagem C#.
Tabela
Neste exemplo, vamos inserir um registro na seguinte tabela.
CREATE TABLE clientes
(
cnpj VARCHAR(14) NOT NULL,
razaosocial VARCHAR(255)
);
ALTER TABLE clientes ADD CONSTRAINT pk_clientes_cnpj PRIMARY KEY (cnpj)
Formulário
Vamos mostrar como executar o mesmo Comando SQL de duas formas diferentes:
- Usando valores de campos da tela.
- Usando valores de uma Record.
Nas duas situações, a primeira coisa a se fazer e ter uma Conexão de Banco de Dados cadastrada apontando para o banco onde você deseja gravar os dados. Neste exemplo, o nome da conexão será “DB Clientes”.
O próxima passo é adicionar a instrução “Executar comando C#” no Procedimento onde você quer realizar a gravação:
Usando Campo de Tela
Supondo que no Formulário existam os seguintes campos:
- txtCnpj: TextBox com o CNPJ do Cliente.
- txtRazaoSocial: TextBox com a Razão Social do Cliente.
O código C# Ficaria assim:
using LATROMI.Extensions;
// Abre a conexão
using (var connection = Database.CreateConnection("DB Clientes"))
{
// Monta dicionário com o valor dos parâmetros
// que serão usados no comando SQL
var commandParameters = new Dictionary<string, object>
{
["@cnpj"] = Fields["txtCnpj"].Value,
["@razaosocial"] = Fields["txtRazaoSocial"].Value
};
// Executa comando SQL usando os parâmetros do dicionário
connection.ExecuteNonQuery(
"INSERT INTO clientes (cnpj, razaosocial) " +
"VALUES (@cnpj, @razaosocial)", commandParameters);
}
Usando Campos da Record
Supondo que no Procedimento onde você vai implementar a gravação exista uma Record chamada “rCliente”, retornando os campos cnpj
e razaosocial
.
O código C# ficariam assim:
using LATROMI.Extensions;
// A record será retornada no formato Dictionary<string, object>.
var rClientes = GetRecord('rClientes');
// Para acessar um campo da Record seria assim:
// rClientes["nome_do_campo"]
// Abre a conexão
using (var connection = Database.CreateConnection("DB Clientes"))
{
// Monta dicionário com o valor dos parâmetros
// que serão usados no comando SQL
var commandParameters = new Dictionary<string, object>
{
["@cnpj"] = rClientes["cnpj"],
["@razaosocial"] = rClientes["razaosocial"]
};
// Executa comando SQL usando os parâmetros do dicionário
connection.ExecuteNonQuery(
"INSERT INTO clientes (cnpj, razaosocial) " +
"VALUES (@cnpj, @razaosocial)", commandParameters);
}
Tipos de Dados
O tipo de dado dos valores dos campos varia de acordo com o tipo do mesmo, conforme mostra a tabela a seguir:
Tipo de Campo | Variação | Tipo de Dados |
---|---|---|
NumericTextBox | Sem casas decimais | System.Int32 |
Com casas decimais | System.Decimal | |
CheckBox | System.Boolean | |
DateTimePickker | System.DateTime | |
RadioButton | System.Int32 | |
Outros | System.String |
Tratamento de Nulos
O valor dos campos dos tipos “NumericTextBox” e “DateTimePicker” será null quando não forem preenchidos.
Para gravar no banco de dados um valor nulo usando C# você deve usar um valor do tipo Convert.DBNull
. Exemplo:
// Monta dicionário com o valor dos parâmetros
// que serão usados no comando SQL
var commandParameters = new Dictionary<string, object>
{
["@cnpj"] = rClientes["cnpj"],
["@razaosocial"] = rClientes["razaosocial"] ?? Convert.DBNull
};