EndExecuteNonQuery,它是什么,它做什么以及如何使用它
本文关键字:何使用 它是什么 EndExecuteNonQuery 什么 | 更新日期: 2023-09-27 17:58:24
我正在通过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.ExecutionaComando(insertd.ToString())"中,这是我创建的一个用于执行命令的类。
还有一件事,我在出现异常时使用了Try和Catch,但如果用户在必须写数字的地方写单词,我想中止连接。我的应用程序正在查找错误,但无论如何都在插入。
谢谢。
EndExecuteNonQuery
与BeginExecuteNonQuery
一起用于异步执行数据库上的命令。我建议您在考虑异步运行查询之前,先更轻松地解决问题。
关于验证用户输入的需求,我建议两件事。第一个是通过在命令中使用参数来消除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
来验证它,这将使它不再是字符串。您应该对其他数字参数执行同样的操作,也许可以考虑使用int.TryParse
。
此链接将对有用
报价:这会做一些事情,比如:
- 更新参数值(输出/返回)
- 检查异常(TDS流中的错误代码-违反约束等)
- 释放作为上述内容一部分缓冲的任何对象/数据等