C# - 此Coe显示“请重新检查CNIC”而不是显示“帐户已被删除”

时间:2017-01-27 07:02:58

标签: c#

我试图在CNIC no。的基础上删除数据库中的记录。记录已成功删除。但是,两者都没有变为真,消息也显示为“帐户已被删除”。显示的消息是“请重新检查CNIC”。

2 个答案:

答案 0 :(得分:1)

我没有在此方案中ExecuteReader()执行delete查询的具体原因。使用串联查询进行删除非常非常危险。我建议你在这里使用参数化来执行上面的查询。代码如下:

string strQuery = "Delete from [AirlineTicketReservation].[dbo].[Traveller_Info] Where CNIC = @CNIC";      
using(SqlCommand cmd = new SqlCommand(strQuery, conn))
{
   cmd.Parameters.Add("@CNIC", SqlDbType.Varchar).Value = mtxtCNIC.Text;
   int rowsAffected = cmd.ExecuteNonQuery();
   if(rowsAffected > 0)
   {
       MessageBox.Show("Account has been deleted.");
   }
   else
   {
       MessageBox.Show("Please Recheck the CNIC, it is not existing", "Failed");
   }
}

更新

我认为没有必要在删除之前检查是否存在,Sice我们在这里使用ExecuteNonQuery()来执行,这将返回受影响的行数。如果没有删除任何行,则表示返回值为0,具体取决于您可以显示的消息。

答案 1 :(得分:1)

使用两个查询,一个选择,一个删除。 您应该参考这些问题的教程。

    try
    {                
        conn.Open();
        string strQuery = "Select CNIC from [AirlineTicketReservation].[dbo].[Traveller_Info] Where CNIC = '" + mtxtCNIC.Text + "'";
        string strDeleteQuery = "Select CNIC from [AirlineTicketReservation].[dbo].[Traveller_Info] Where CNIC = '" + mtxtCNIC.Text + "'";

        SqlDataReader reader;
        SqlCommand cmd = new SqlCommand(strQuery, conn);
        reader = cmd.ExecuteReader();

        while (reader.Read())
        {
            cnic = reader["CNIC"].ToString();
            if (mtxtCNIC.Text == cnic)
            {
                SqlCommand delCommand = new SqlCommand(strDeleteQuery, conn);
                delCommand.ExecuteNonQuery();
                done = true;
                MessageBox.Show("Account has been deleted.");
                                    break;
            }
        }
    }
    catch (SqlException ex)
    {
        MessageBox.Show(ex.Message);

    }
    finally
    {
        conn.Close();
    }
    if (!done)
    {
        MessageBox.Show("Please Recheck the CNIC", "Failed");
    }