0

SQL の ExecuteNonQuery() プロパティを使用して、影響を受ける行の数を返す select 文があります。ただし、これは常に -1 を返します。私は調査を行い、SQLのSETNOCOUN ONプロパティの結果であることに気付きました。ストアド プロシージャを使用していないので、どうすればクエリからオフにできますか? 以下は私のコードです。

protected void txtName_Changed(object sender, EventArgs e)
        {
            string sql = "";

            using (SqlCommand cmd = connection.CreateCommand())
            {
                sql = "SET NOCOUNT OFF;SELECT * FROM [CLIENT] WHERE cname = '" + txtName.Text + "'";
                cmd.Connection = connection;
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = sql;
                connection.Open();
                int i = cmd.ExecuteNonQuery();
                if (i > 0 )
                {
                    txtName.BackColor = System.Drawing.ColorTranslator.FromHtml("#FD5E53");
                    txtName.BorderColor = System.Drawing.ColorTranslator.FromHtml("#CD4A4A");

                    lblError.Text = "Client Exist.";
                    lblError.Visible = true;
                    lblError.Enabled = true;
                    btnInsertClient.Enabled = false;
                    pnlAddEdit_ModalPopupExtender.Show();
                    //    return;
                }
                else
                {
                    txtName.BackColor = System.Drawing.ColorTranslator.FromHtml("#F2F0E1");
                    txtName.BorderColor = System.Drawing.ColorTranslator.FromHtml("#FFFFFF");

                    lblError.Text = "";
                    lblError.Visible = false;
                    lblError.Enabled = false;
                    btnInsertClient.Enabled = true;
                    pnlAddEdit_ModalPopupExtender.Show();
                }
                connection.Close();

            }
        }
4

1 に答える 1

1

使用しないでくださいExecute**Non**Query():

UPDATE、INSERT、および DELETEステートメントの場合、戻り値はコマンドによって影響を受けた行の数です。挿入または更新されるテーブルにトリガーが存在する場合、戻り値には、挿入または更新操作の両方によって影響を受ける行の数と、トリガーまたはトリガーによって影響を受ける行の数が含まれます。他のすべてのタイプのステートメントの場合、戻り値は -1 です。ロールバックが発生した場合、戻り値も -1 です。

例を試してくださいExecuteScalar()

クエリを実行し、クエリによって返された結果セットの最初の行の最初の列を返します。

次に、クエリをCOUNT().

ああ、SQL インジェクションと反復コードに注意してください。

于 2013-10-02T09:15:26.303 に答える