EndExecuteNonQuery,它是什么,它做什么以及如何使用它?

时间:2013-02-09 16:55:30

标签: c# mysql try-catch

我通过C#应用程序在mysql数据库中插入数据,我想知道插入是否成功并在互联网上搜索我读了一些关于“EndExecuteNonQuery”的内容,但它没有解释任何关于应该如何使用它。我没有想到我可以使用它的方式甚至为什么要使用它。

try
        {
            cepescola = txtcepescola.Text + txtcepescola1.Text;
            num_escola = int.Parse(txtnumescola.Text);
            cnpj = txtcnpj.Text + txtcnpj2.Text;
            telefoneescola = txtddd.Text + txttel.Text;
            inserte.Append("Insert into estabelecimento ( Nome,CEP,Endereco,Numero,Bairro,UF,CNPJ,Telefone)");
            inserte.Append(" values ");
            inserte.Append("( '" + txtnomeescola.Text + "','" + cep + "','" + txtenderecoescola.Text + "','" + num_escola + "',");
            inserte.Append(" '" + txtbairroescola.Text + "','" + cbxufescola.Text + "','" + cnpj + "','" + telefoneescola + "')");
            conexao.ExecutaComando(inserte.ToString());
            groupBox2.Enabled = false;
            btnestabelecimento.Visible = false;
            btnlogin.Visible = true;
            txtlogin.Focus();
        }
        catch (Exception)
        {
            MessageBox.Show("Dados digitados em formato incorreto.", "Erro de Dados", MessageBoxButtons.OK, MessageBoxIcon.Error);
            groupBox2.Enabled = true;
            btnestabelecimento.Visible = true;
            btnlogin.Visible = false;
            txtlogin.Focus();

        }

在这种情况下我可以在哪里使用它,我应该更改什么? Obs:在“Conexão.ExecutaComando(insertd.ToString());”这是我为执行命令而创建的一个类。

还有一件事,我在异常的情况下使用了Try和Catch,但是如果用户写的话我想中断连接,例如,他必须写下数字的话。我的应用是发现错误,但无论如何它都在插入。

感谢。

2 个答案:

答案 0 :(得分:2)

EndExecuteNonQueryBeginExecuteNonQuery结合使用,以异步方式对数据库执行命令。在建议异步运行查询之前,我建议您更轻松地解决问题。

关于您需要验证用户输入的主题,我建议2件事。第一种方法是通过在命令中使用参数来消除SQL注入攻击的风险。例如,而不是使用以下(简化为简化):

var sql = "insert into estabelecimento (Nome) values ('" + txtnomeescola.Text + "')";

您应该使用以下内容:

var sql = "insert into estabelecimento (Nome) values (@nomeescola)";
//assume cmd is a SqlCommand instance
cmd.Parameters.AddWithValue("@nomeescola", txtnomeescola.Text);

其次,如果您需要对查询的输入执行验证,那么您应该在执行命令之前执行 。您已经通过将num_escola参数解析为int来验证您的{{1}}参数,这将使其成为字符串。您应该对其他数字参数执行相同的操作,也可以考虑使用int.TryParse代替。

答案 1 :(得分:0)

LINK对您有用

  

<强>引用:   这将做的事情如下:

     
      
  1. 更新参数值(输出/返回)
  2.   
  3. 检查异常(TDS流中的错误代码 - 违反约束等)
  4.   
  5. 释放作为上述等的一部分缓冲的任何对象/数据等
  6.