繁体   English   中英

从数据库删除之前的验证

[英]Verification before delete from database

我有一个示例网站,您可以在其中输入您的电子邮件地址,并将其插入MS SQL数据库。 在下一页上,GridView显示数据库中的列表。 现在,我需要添加一个删除地址的函数,但是它必须验证该地址当前是否为

public partial class Default : Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Label1.Text = GetLastWriteTime(Request.PhysicalPath).ToString();
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        string data = DateTime.Now.ToLongDateString() + "," + DateTime.Now.ToLongTimeString() + ": ";

        SqlDataSource1.InsertCommand = "INSERT INTO ListaAdresow (Email) Values('" + TextBox1.Text + "')";

        try
        {
            SqlDataSource1.Insert();
            Label2.Text += data + "added into database: " + TextBox1.Text + "<br/>";
            TextBox1.Text = "";
        }
        catch (Exception ex)
        {
            Label2.Text += data + ex.Message;
        }
    }
    protected void Button2_Click(object sender, EventArgs e)
    {
        string data = DateTime.Now.ToLongDateString() + "," + DateTime.Now.ToLongTimeString() + ": ";
        SqlDataSource1.DeleteCommand = "DELETE FROM ListaAdresow WHERE Email='" + TextBox1.Text + "'";

        SqlDataSource1.SelectCommand = "SELECT  FROM [ListaAdresow] WHERE Email=" + TextBox1.Text;

        try
        {
                SqlDataSource1.Delete();

                Label2.Text += data + "removed from database: " + TextBox1.Text + "<br/>";
                TextBox1.Text = "";

        }
        catch (Exception ex)
        {
            Label2.Text += data + ex.Message;
        }
    }
}

我强烈建议您为所有查询创建存储过程,但是为了举例说明,在gridview中,您可以执行以下操作:

if (myGrid.SelectedRows.Count > 0)
{
     int selectedIndex = myGrid.SelectedRows[0].Index;

     // gets the RowID from the first column in the grid
     int rowID = int.Parse(BooksGrid[0, selectedIndex].Value.ToString());

     string sql = "IF EXISTS(SELECT COLUMN FROM Table1 WHERE ID = @rowID)
                    BEGIN 
                      DELETE FROM TABLE1 WHERE ID = @rowID"
                    END;

     }

如果可以在执行删除后进行验证,则删除数据源方法将返回数据库上受影响的行总数。 请参阅文档

要回答您的问题,您可以使用以下内容(未经测试):

SqlDataAdapter da = new SqlDataAdapter();
    DataTable dt = new DataTable();

    // Create the SelectCommand using paramaterized queries
        SqlCommand command = new SqlCommand("SELECT * 
                                            FROM ListaAdresow 
                                            WHERE Email = @Email", connection);
    command.Parameters.Add("@Email", SqlDbType.VarChar, 40, TextBox1.Text);

    da.SelectCommand = command;
    da.Fill(dt);

    if (dt.Rows.Count > 0)
    {
        //Row Exists
    }
    else
    {
        //Row Does Not Exist
    }

但是,我重申其他人所说的, DeleteCommand可以自己运行,它将返回受影响的记录数。

只需将值放入会话中,然后在删除前用删除一个检查会话值即可

尝试使用存储过程,并通过参数传递值。 这样,您可以轻松地检查数据库中是否存在数据。 并且它还可以帮助您防止某种程度的sql注入。 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM