[英]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.