我试图在CNIC no。的基础上删除数据库中的记录。记录已成功删除。但是,两者都没有变为真,消息也显示为“帐户已被删除”。显示的消息是“请重新检查CNIC”。
答案 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");
}