Parametros são utilizados em comandos SQL

This commit is contained in:
Adriano Serighelli 2023-10-02 20:21:09 -03:00
parent 43ed54c5fe
commit 8b1c69168e
2 changed files with 105 additions and 104 deletions

View File

@ -3,6 +3,7 @@
using System.Data.OleDb;
using System.Globalization;
using System.Net.Http.Headers;
using System.Reflection;
using System.Runtime.Intrinsics.X86;
using System.Text;
using System.Text.Json;
@ -69,28 +70,36 @@
string uc = new Regex("^0+").Replace(parsedResult.locationNumber, string.Empty).Replace("/", string.Empty).Replace("-", string.Empty).Replace(".", string.Empty);
// Vinculo da fatura com os dados cadastrais
string selectSQL = $"SELECT COUNT (Cod_Smart_unidade) FROM Dados_cadastrais WHERE Codigo_Instalacao = '@uc'";
using (OleDbCommand cmd = new OleDbCommand(selectSQL, conn))
int? unidades;
string sqlQuery = $"SELECT COUNT (Cod_Smart_unidade) FROM Dados_cadastrais WHERE Codigo_Instalacao = @uc";
using (OleDbCommand cmd = new OleDbCommand(sqlQuery, conn))
{
cmd.Parameters.AddWithValue("@uc", uc);
int? unidades = (int?)cmd.ExecuteScalar();
unidades = (int?)cmd.ExecuteScalar();
if (unidades == 1)
{
selectSQL = $"SELECT Cod_Smart_unidade, Cliente, Unidade, PerfilCCEE, Submercado, Status_unidade, Grupo, Distribuidora, ICMS_TUSD, Demanda_P, Demanda_FP, Caminho_NFs FROM Dados_cadastrais WHERE Codigo_Instalacao = '{uc}'";
sqlQuery = $"SELECT Cod_Smart_unidade, Cliente, Unidade, PerfilCCEE, Submercado, Status_unidade, Grupo, Distribuidora, ICMS_TUSD, Demanda_P, Demanda_FP, Caminho_NFs FROM Dados_cadastrais WHERE Codigo_Instalacao = @uc";
}
else
{
selectSQL = $"SELECT Cod_Smart_unidade, Cliente, Unidade, PerfilCCEE, Submercado, Status_unidade, Grupo, Distribuidora, ICMS_TUSD, Demanda_P, Demanda_FP, Caminho_NFs FROM Dados_cadastrais WHERE (CNPJ_CPF LIKE '@CNPJ%' AND Codigo_Instalacao = '@uc') OR (Razao_Social LIKE '@Razao_Social' AND Codigo_Instalacao = '@uc')";
sqlQuery = $"SELECT Cod_Smart_unidade, Cliente, Unidade, PerfilCCEE, Submercado, Status_unidade, Grupo, Distribuidora, ICMS_TUSD, Demanda_P, Demanda_FP, Caminho_NFs FROM Dados_cadastrais WHERE (CNPJ_CPF LIKE @cnpj AND Codigo_Instalacao = @uc) OR (Razao_Social LIKE @razao_social AND Codigo_Instalacao = @uc)";
}
}
using (OleDbCommand cmd = new OleDbCommand(selectSQL, conn))
using (OleDbCommand cmd = new OleDbCommand(sqlQuery, conn))
{
if (unidades == 1)
{
cmd.Parameters.AddWithValue("@CNPJ", parsedResult.customer.cnpj?[..8] ?? "NAN");
cmd.Parameters.AddWithValue("@uc", uc);
cmd.Parameters.AddWithValue("@Razao_Social", parsedResult.customer.name.Replace("'", "''"));
}
else
{
cmd.Parameters.AddWithValue("@cnpj", parsedResult.customer.cnpj?[..8] != null ? parsedResult.customer.cnpj?[..8] + "%" : "NAN");
cmd.Parameters.AddWithValue("@uc", uc);
cmd.Parameters.AddWithValue("@razao_social", parsedResult.customer.name);
}
using (OleDbDataReader reader = cmd.ExecuteReader())
{
@ -116,10 +125,11 @@
// Verifica se a fatura ja foi lançada
bool tusdLanc;
selectSQL = $"SELECT Cod_TUSD FROM Dados_TUSD WHERE Cod_TUSD = @Cod_TUSD";
using (OleDbCommand cmd = new OleDbCommand(selectSQL, conn))
sqlQuery = $"SELECT Cod_TUSD FROM Dados_TUSD WHERE Cod_TUSD = ?";
using (OleDbCommand cmd = new OleDbCommand(sqlQuery, conn))
{
cmd.Parameters.AddWithValue("@Cod_TUSD", long.Parse(dadosTusd.Cod_Smart_unidade.ToString() + dadosTusd.Mes.ToString()));
double cod_tusd = double.Parse(dadosTusd.Cod_Smart_unidade.ToString() + dadosTusd.Mes.ToString());
cmd.Parameters.AddWithValue("?", cod_tusd);
using (OleDbDataReader reader = cmd.ExecuteReader())
{
@ -142,12 +152,12 @@
else
{
// PIS e Cofins
string pisSQL = $"SELECT Distribuidoras_PIS.PIS, Distribuidoras_PIS.COFINS FROM Distribuidoras_geral INNER JOIN Distribuidoras_PIS ON Distribuidoras_geral.ID_dist = Distribuidoras_PIS.ID_dist WHERE Distribuidoras_PIS.Mes='@mes' AND Distribuidoras_geral.Distribuidora='@distribuidora'";
sqlQuery = $"SELECT Distribuidoras_PIS.PIS, Distribuidoras_PIS.COFINS FROM Distribuidoras_geral INNER JOIN Distribuidoras_PIS ON Distribuidoras_geral.ID_dist = Distribuidoras_PIS.ID_dist WHERE Distribuidoras_PIS.Mes = ? AND Distribuidoras_geral.Distribuidora = ?";
using (OleDbCommand cmd = new OleDbCommand(pisSQL, conn))
using (OleDbCommand cmd = new OleDbCommand(sqlQuery, conn))
{
cmd.Parameters.AddWithValue("@mes", dadosTusd.Mes);
cmd.Parameters.AddWithValue("@distribuidora", dadosTusd.Distribuidora);
cmd.Parameters.AddWithValue("?", dadosTusd.Mes.ToString());
cmd.Parameters.AddWithValue("?", dadosTusd.Distribuidora);
using (OleDbDataReader reader = cmd.ExecuteReader())
{
@ -188,7 +198,8 @@
dadosTusd.Valor = parsedResult.totalCharges;
dadosTusd.Inicio_Leitura = parsedResult.dates.reading.periodFrom;
dadosTusd.Fim_leitura = parsedResult.dates.reading.periodUntil;
dadosTusd.Hora_TUSD = DateTime.Now;
DateTime d = DateTime.Now;
dadosTusd.Hora_TUSD = new DateTime(d.Year, d.Month, d.Day, d.Hour, d.Minute, d.Second);
dadosTusd.Dem_Reativa_kvar = 0;
dadosTusd.Multa = 0;
dadosTusd.Credito = 0;
@ -256,26 +267,26 @@
dadosTusd.Dem_Cont_FP = item.contract;
}
using (OleDbCommand cmd = new OleDbCommand(selectSQL, conn))
using (OleDbCommand cmd = new OleDbCommand(sqlQuery, conn))
{
if (dadosTusd.Perfil == "AZUL")
{
if (item.period == "peak")
{
selectSQL = $"UPDATE Dados_cadastrais SET Demanda_P = @demanda WHERE Cod_Smart_unidade = @cod_smart_unidade";
sqlQuery = $"UPDATE Dados_cadastrais SET Demanda_P = @demanda WHERE Cod_Smart_unidade = @cod_smart_unidade";
cmd.Parameters.AddWithValue("@demanda", item.contract);
cmd.Parameters.AddWithValue("@cod_smart_unidade", dadosTusd.Cod_Smart_unidade);
}
else if (item.period == "off-peak")
{
selectSQL = $"UPDATE Dados_cadastrais SET Demanda_FP = @demanda WHERE Cod_Smart_unidade = @cod_smart_unidade";
sqlQuery = $"UPDATE Dados_cadastrais SET Demanda_FP = @demanda WHERE Cod_Smart_unidade = @cod_smart_unidade";
cmd.Parameters.AddWithValue("@demanda", item.contract);
cmd.Parameters.AddWithValue("@cod_smart_unidade", dadosTusd.Cod_Smart_unidade);
}
}
else if (dadosTusd.Perfil == "VERDE")
{
selectSQL = $"UPDATE Dados_cadastrais SET Demanda_P = @demanda, Demanda_FP = @demanda WHERE Cod_Smart_unidade = @cod_smart_unidade";
sqlQuery = $"UPDATE Dados_cadastrais SET Demanda_P = @demanda, Demanda_FP = @demanda WHERE Cod_Smart_unidade = @cod_smart_unidade";
cmd.Parameters.AddWithValue("@demanda", item.contract);
cmd.Parameters.AddWithValue("@cod_smart_unidade", dadosTusd.Cod_Smart_unidade);
}
@ -313,8 +324,8 @@
// Exclui os items lançados anteriormente para a fatura e cria a instrução SQL para inserir os novos items
if (j == 1)
{
string deleteOthers = $"DELETE FROM Dados_TUSD_aux WHERE Cod_TUSD = @cod_tusd";
using (OleDbCommand cmd = new OleDbCommand(deleteOthers, conn))
sqlQuery = $"DELETE FROM Dados_TUSD_aux WHERE Cod_TUSD = @cod_tusd";
using (OleDbCommand cmd = new OleDbCommand(sqlQuery, conn))
{
cmd.Parameters.AddWithValue("@cod_tusd", dadosTusd.Cod_TUSD);
cmd.ExecuteNonQuery();
@ -378,58 +389,45 @@
StringBuilder values = new StringBuilder();
// Verifica se já existe a fatura lançada | atualizar fatura ou nova fatura
string selectTUSD = $"SELECT Cod_TUSD FROM Dados_TUSD WHERE Cod_TUSD = {dadosTusd.Cod_TUSD}";
cmd.CommandText = selectTUSD.ToString();
reader = cmd.ExecuteReader();
if (reader.Read())
if (tusdLanc)
{
// Cria o comando para atualização da fatura
reader.Close();
StringBuilder updateSQL = new StringBuilder("UPDATE Dados_TUSD SET ");
sqlQuery = "UPDATE Dados_TUSD SET ";
// Loop por todos os dados ja obtidos
for (var i = 0; i < dados.Count(); i++)
PropertyInfo[] propriedades = typeof(RecordSet).GetProperties();
foreach (PropertyInfo propriedade in propriedades)
{
// Adiciona o nome do campo
string field = dados[i].Name + "=";
string nomeColuna = propriedade.Name;
// Valor para o campo selecionado
var value = dados[i].GetValue(dadosTusd) ?? string.Empty;
// Adiciona '(aspas) para textos e datas
if (dados[i].PropertyType.Name == "String" ^ dados[i].PropertyType.Name == "DateTime")
{
value = "'" + (dados[i].GetValue(dadosTusd)?.ToString() ?? string.Empty) + "'";
// Adicione a coluna à instrução SQL
sqlQuery += $"{nomeColuna} = @{nomeColuna}, ";
}
// Substitui ,(virgula) por .(ponto)
else if (dados[i].PropertyType.Name == "Single")
// Remova a última vírgula e adicione a cláusula WHERE
sqlQuery = sqlQuery.TrimEnd(',', ' ') + $" WHERE Cod_TUSD = @cod_tusd";
using (OleDbCommand cmd = new OleDbCommand(sqlQuery, conn))
{
float valueFloat = (float)value;
value = valueFloat.ToString(new CultureInfo("en-US"));
}
if (i > 0)
foreach (PropertyInfo propriedade in propriedades)
{
updateSQL.Append(",");
string nomeColuna = propriedade.Name;
object valorColuna = propriedade.GetValue(dadosTusd) ?? string.Empty;
cmd.Parameters.AddWithValue($"@{nomeColuna}", valorColuna);
}
updateSQL.Append(field + value);
}
// Valor do código TUSD na cláusula WHERE
cmd.Parameters.AddWithValue("@cod_tusd", dadosTusd.Cod_TUSD);
updateSQL.Append($" WHERE Cod_TUSD = {dadosTusd.Cod_TUSD}");
cmd.CommandText = updateSQL.ToString();
cmd.ExecuteNonQuery();
}
// Inseri os itens classificados como "othes" após criar o registro da TUSD devido as relação entre as tabelas
foreach ((string name, float valor) in insertOthers)
{
j++;
selectSQL = "INSERT INTO Dados_TUSD_aux (Cod_TUSD,Id,Nome,Valor,Cod_lanc) VALUES ( @cod_tusd, @j,'@name',@valor,0)";
using (OleDbCommand cmd = new OleDbCommand(selectSQL, conn))
sqlQuery = "INSERT INTO Dados_TUSD_aux (Cod_TUSD,Id,Nome,Valor,Cod_lanc) VALUES (@cod_tusd, @j, @name, @valor,0)";
using (OleDbCommand cmd = new OleDbCommand(sqlQuery, conn))
{
cmd.Parameters.AddWithValue("@cod_tusd", dadosTusd.Cod_TUSD);
cmd.Parameters.AddWithValue("@j", j);
@ -442,55 +440,58 @@
else
{
// Cria o comando para lançar da fatura
reader.Close();
StringBuilder insertSQL = new StringBuilder("INSERT INTO Dados_TUSD (");
sqlQuery = "INSERT INTO Dados_TUSD (";
// Loop pelo nome dos campos
for (var i = 0; i < dados.Count(); i++)
PropertyInfo[] propriedades = typeof(RecordSet).GetProperties();
int i = 0;
foreach (PropertyInfo propriedade in propriedades)
{
// Adiciona o nome do campo
string field = dados[i].Name;
string nomeColuna = propriedade.Name;
// Valor para o campo selecionado
var value = dados[i].GetValue(dadosTusd) ?? string.Empty;
// Adiciona '(aspas) para textos e datas
if (dados[i].PropertyType.Name == "String" ^ dados[i].PropertyType.Name == "DateTime")
{
value = "'" + (dados[i].GetValue(dadosTusd)?.ToString() ?? string.Empty) + "'";
// Adicione a coluna à instrução SQL
sqlQuery += $"{nomeColuna}, ";
}
// Substitui ,(virgula) por .(ponto)
else if (dados[i].PropertyType.Name == "Single")
// Remova a última vírgula e adicione a cláusula VALUES
sqlQuery = sqlQuery.TrimEnd(',', ' ') + ") VALUES (";
foreach (PropertyInfo propriedade in propriedades)
{
float valueFloat = (float)value;
value = valueFloat.ToString(new CultureInfo("en-US"));
// Adicione os parâmetros à instrução SQL
string nomeColuna = propriedade.Name;
sqlQuery += $"@{nomeColuna}, ";
}
if (i > 0)
// Remova a última vírgula e feche a instrução SQL
sqlQuery = sqlQuery.TrimEnd(',', ' ') + ")";
using (OleDbCommand cmd = new OleDbCommand(sqlQuery, conn))
{
fields.Append(",");
values.Append(",");
foreach (PropertyInfo propriedade in propriedades)
{
string nomeColuna = propriedade.Name;
object valorColuna = propriedade.GetValue(dadosTusd) ?? string.Empty;
cmd.Parameters.AddWithValue($"@{nomeColuna}", valorColuna);
}
fields.Append(field);
values.Append(value);
foreach (OleDbParameter param in cmd.Parameters)
{
Console.WriteLine($"Nome do parâmetro: {param.ParameterName}");
Console.WriteLine($"Valor do parâmetro: {param.Value}");
Console.WriteLine($"Tipo de dados do parâmetro: {param.DbType}");
Console.WriteLine();
}
insertSQL.Append(fields)
.Append(") VALUES (")
.Append(values)
.Append(")");
cmd.CommandText = insertSQL.ToString();
cmd.ExecuteNonQuery();
}
// Inseri os itens classificados como "othes" após criar o registro da TUSD devido as relação entre as tabelas
j = 0;
foreach ((string name, float valor) in insertOthers)
{
j++;
selectSQL = "INSERT INTO Dados_TUSD_aux (Cod_TUSD,Id,Nome,Valor,Cod_lanc) VALUES ( @cod_tusd, @j,'@name',@valor,0)";
using (OleDbCommand cmd = new OleDbCommand(selectSQL, conn))
sqlQuery = "INSERT INTO Dados_TUSD_aux (Cod_TUSD,Id,Nome,Valor,Cod_lanc) VALUES (@cod_tusd, @j, @name, @valor, 0)";
using (OleDbCommand cmd = new OleDbCommand(sqlQuery, conn))
{
cmd.Parameters.AddWithValue("@cod_tusd", dadosTusd.Cod_TUSD);
cmd.Parameters.AddWithValue("@j", j);

View File

@ -2,19 +2,19 @@
{
public class RecordSet
{
public long Cod_TUSD { get; set; }
public double Cod_TUSD { get; set; }
public long Cod_Smart_unidade { get; set; }
public double Cod_Smart_unidade { get; set; }
public int Mes { get; set; }
public float Revisao { get; set; }
public int Revisao { get; set; }
public bool Rev_atual { get; set; }
public DateTime Hora_TUSD { get; set; }
public float Tempo_TUSD { get; set; }
public int Tempo_TUSD { get; set; }
public string? Perfil_CliqCCEE { get; set; }