C# 从数据库中删除前的验证

C# 从数据库中删除前的验证,c#,asp.net,.net,sql-server,tsql,C#,Asp.net,.net,Sql Server,Tsql,我有一个示例网站,您可以在其中输入电子邮件地址并将其插入MS SQL数据库。在下一页,GridView显示了数据库中的列表。现在我需要添加一个删除地址的函数,但它必须验证地址当前是否正确 public partial class Default : Page { protected void Page_Load(object sender, EventArgs e) { Label1.Text = GetLastWriteTime(Request.Physical

我有一个示例网站,您可以在其中输入电子邮件地址并将其插入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;
        }
    }
}
公共部分类默认值:第页
{
受保护的无效页面加载(对象发送方、事件参数e)
{
Label1.Text=GetLastWriteTime(Request.PhysicalPath.ToString();
}
受保护的无效按钮1\u单击(对象发送者,事件参数e)
{
字符串数据=DateTime.Now.ToLongDateString()+”,“+DateTime.Now.ToLongTimeString()+”:”;
SqlDataSource1.InsertCommand=“插入ListaAdresow(电子邮件)值(“+TextBox1.Text+”)”;
尝试
{
SqlDataSource1.Insert();
Label2.Text+=data+”添加到数据库:“+TextBox1.Text+”
”; TextBox1.Text=“”; } 捕获(例外情况除外) { 标签2.文本+=数据+ex.消息; } } 受保护的无效按钮2\u单击(对象发送者,事件参数e) { 字符串数据=DateTime.Now.ToLongDateString()+”,“+DateTime.Now.ToLongTimeString()+”:”; SqlDataSource1.DeleteCommand=“从列表中删除,其中电子邮件=”+TextBox1.Text+”; SqlDataSource1.SelectCommand=“从[ListaAdresow]中选择,其中Email=“+TextBox1.Text; 尝试 { SqlDataSource1.Delete(); Label2.Text+=data+“已从数据库中删除:”+TextBox1.Text+“
”; TextBox1.Text=“”; } 捕获(例外情况除外) { 标签2.文本+=数据+ex.消息; } } }
如果您可以在执行delete之后进行验证,则数据源的delete方法将返回影响数据库的行总数

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


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

我强烈建议您为所有查询创建存储过程,但出于示例的考虑,您可以从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;

     }

只需将该值放入会话中,并在删除前用delete one检查会话值

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

第一步。请继续阅读。如果不检查数据库就删除,则可以。如果它不存在,它不会抛出错误,如果它存在,它将被删除。正如flem所建议的,研究EF,并使用它连接到SQL SERVER,使用这样的字符串进行数据操作可能是危险的。了解原因后,将查询更改为存储过程或EF。此外,您的delete命令将删除具有相同电子邮件的每个条目,如果这是您想要的,则可以。但是,如果同一封电子邮件中有多个条目,那么我建议使用一个唯一的ID,并使用该ID执行插入/更新/删除操作?请尝试{int value=SqlDataSource1.Delete();如果(value>0){Label2.Text+=data+”已从数据库中删除:“+TextBox1.Text+”
;“TextBox1.Text=”“;}否则{Label2.Text+=data+”邮件在数据库中不存在}}catch(Exception ex){Label2.Text+=data+ex.Message;}是的,返回的代码显示数据库中有多少行受到影响。这是一种更有效的方法。
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;

     }