我通过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,但是如果用户写的话我想中断连接,例如,他必须写下数字的话。我的应用是发现错误,但无论如何它都在插入。
感谢。
答案 0 :(得分:2)
EndExecuteNonQuery
与BeginExecuteNonQuery
结合使用,以异步方式对数据库执行命令。在建议异步运行查询之前,我建议您更轻松地解决问题。
关于您需要验证用户输入的主题,我建议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对您有用
<强>引用:强> 这将做的事情如下:
- 更新参数值(输出/返回)
- 检查异常(TDS流中的错误代码 - 违反约束等)
- 释放作为上述等的一部分缓冲的任何对象/数据等
醇>