嘿,你可以給我一些提示。我注意到打開和關閉數據庫連接的正確方法是使用自動使用IDisposable接口釋放資源的using
statement(請糾正我,如果我錯了)。我應該使用多少使用語句?有一個限制?
所以我決定開始使用它,但是代碼在超過3個之後開始看起來有點線。請問如果我使用它錯誤,請告訴我嗎?這是一個按鈕事件,我使用using
語句創建一些MySql類對象。
private void buttonAdicionar_Click(object sender, EventArgs e)
{
using (MySqlConnection con = new MySqlConnection(Properties.Settings.Default.ConnectionString))
{
using (MySqlDataAdapter da = new MySqlDataAdapter())
{
using (DataTable dt = new DataTable())
{
try
{
using (MySqlCommand cmd = new MySqlCommand("SELECT codigo, descricao, unidMedida, vlUnitario FROM tab_estoque WHERE codBar = @codBar;", con))
{
cmd.Parameters.Add("@codBar", MySqlDbType.VarChar).Value = this.textBoxCodBarras.Text;
con.Open();
da.SelectCommand = cmd;
da.SelectCommand.ExecuteNonQuery();
da.Fill(dt);
// Caso haja alguma linha no DataSet ds então existe um produto com o codigo de barra procurado no banco de dados
if (dt.Rows.Count == 1)
{
bool itemIgual = false;
int rowIndex = 0;
// Passa por todas as linhas do carrinho de compras para verificar se existe outro item igual
foreach (DataGridViewRow dgvCarrinhoRow in dataGridViewCarrinho.Rows)
{
// Verifica se o produto da linha do carrinho de compra é o mesmo do código de barras
if (dgvCarrinhoRow.Cells[1].FormattedValue.ToString() == dt.Rows[0][0].ToString())
{
// Verifica se estão tentando vender uma certa quantidade de um produto que esteja acima da quantidade do mesmo no estoque
if (this.VerificarSeExcede(Convert.ToInt32(dgvCarrinhoRow.Cells[1].FormattedValue), Convert.ToInt32(dgvCarrinhoRow.Cells[3].FormattedValue) + 1) == 1)
{
// Adiciona mais um na quantidade do item no carrinho de compra
dgvCarrinhoRow.Cells[3].Value = Convert.ToInt32(dgvCarrinhoRow.Cells[3].FormattedValue) + 1;
// Multiplica o VL. ITEM. pela nova quantidade e armazena o resultado em VL. ITEM
dgvCarrinhoRow.Cells[6].Value = String.Format("{0:f}",
(Convert.ToDouble(dgvCarrinhoRow.Cells[3].Value) * Convert.ToDouble(dgvCarrinhoRow.Cells[5].Value)));
// Adiciona o valor do produto ao valor total da venda
this.totalVenda += Convert.ToDouble(dgvCarrinhoRow.Cells[5].Value);
}
else if (this.VerificarSeExcede(Convert.ToInt32(dt.Rows[0][0].ToString()), 1) == 0)
{
MessageBox.Show("Ocorreu a tentativa de vender um produto que está em falta no estoque.", "Caixa", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else
{
MessageBox.Show("Ocorreu a tentativa de vender uma certa quantidade deste produto que excede a quantidade do mesmo no estoque.", "Caixa", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
itemIgual = true; // Evita que o if abaixo seja executado
break; // Sai do loop para econimizar tempo no processamento
}
rowIndex++;
}
// Caso o item não seja igual a nenhum outro no carrinho ele é adicionado
if (!itemIgual)
{
// Verifica se estão tentando vender uma certa quantidade de um produto que esteja acima da quantidade do mesmo no estoque
if (this.VerificarSeExcede(Convert.ToInt32(dt.Rows[0][0].ToString()), 1) == 1)
{
this.dataGridViewCarrinho.Rows.Add(
++this.item, // ITEM
dt.Rows[0][0], // CÓDIGO
dt.Rows[0][3], // DESCRIÇÃO
1, // QTD.
dt.Rows[0][2], // UN.
dt.Rows[0][3], // VL. UNIT.
dt.Rows[0][3]); // VL. ITEM.
// Adiciona o valor do produto ao valor total da venda
this.totalVenda += Convert.ToDouble(dt.Rows[0][3].ToString());
}
else if (this.VerificarSeExcede(Convert.ToInt32(dt.Rows[0][0].ToString()), 1) == 0)
{
MessageBox.Show("Ocorreu a tentativa de vender um produto que está em falta no estoque.", "Caixa", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else
{
MessageBox.Show("Ocorreu a tentativa de vender uma certa quantidade deste produto que excede a quantidade do mesmo no estoque.", "Caixa", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
this.AtualizarValorCompra();
this.dataGridViewCarrinho.ClearSelection();
}
else // Mensagem exibida caso a consulta nao retorne alguma coisa
{
MessageBox.Show("Este item não consta no banco de dados.", "Caixa", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
catch (Exception ex)
{
MessageBox.Show("Ocorreu um erro durante a comunicação com o banco de dados.\n\n" + ex.Message, "Caixa", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
this.LimparControles(1);
}
謝謝你提供的信息,我我以前不知道我能做到這一點! – Zignd
+1最後一段:) –