0

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());」で コマンドを実行するために私が作成したクラスです。

そしてもう1つ、例外が発生した場合にTry and Catchを使用しましたが、ユーザーが数字を書かなければならない単語などを書いた場合は、接続を中止したいと思います。私のアプリケーションは間違いを見つけることですが、とにかく挿入しています。

ありがとう。

4

2 に答える 2

2

EndExecuteNonQueryBeginExecuteNonQueryデータベースでコマンドを非同期的に実行するためにと組み合わせて使用​​されます。クエリを非同期で実行することを検討する前に、問題をより快適に解決することをお勧めします。

ユーザー入力を検証する必要性について、2つのことを提案します。1つは、コマンドでパラメーターを使用して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

于 2013-02-09T19:43:39.320 に答える
0

このリンクは役に立ちます

引用: これは次のようなことを行います:

  1. パラメーター値の更新 (アウト/リターン)
  2. 例外のチェック (TDS ストリームのエラー コード - 制約違反など)
  3. 上記の一部としてバッファリングされたオブジェクト/データを解放するなど
于 2013-02-09T16:59:59.463 に答える