0

我有一个选择状态,我使用 SQL 的 ExecuteNonQuery() 属性返回受影响的行数。但是,这始终返回 -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 回答