触发器的使用

触发器的使用

一、格式:

CREATE TRIGGER TriggerName

ON dbo.Task

FOR /* INSERT, UPDATE, DELETE */

AS

    /* IF UPDATE () ...*/

二、经典例子:

1ALTER TRIGGER StaffTrigger

ON dbo.Staff

FOR INSERT, UPDATE, DELETE/*设置当何种操作进行时引起触发*/

AS

    /*Update Trigger*/

     IF UPDATE (StaffName)  select NameResult= 'StaffName Modified'/*当对字段StaffName更新时*/

     if update(RealName) select 'RealName Modified'

     if update(Email) select 'Email Modified'

     if update(Birthday) select 'Birthday Modifed'

     if update(Password) select 'Password Modifed'

2ALTER TRIGGER DeteleTrigger

ON dbo.Staff

FOR DELETE

AS

/*Delede Trigger*/

    /*同时删除与要删除项有关系的数据*/

     declare @StaffID int

    select @StaffID=StaffID from Deleted /*Deleted表示要删除的缓冲表*/

    DELETE FROM Task

    WHERE  (StaffID = @StaffID)

三、注意:

Deleted 要删除或更新的临时表,注意没有updated

Inserted 要插入的临时表
四、页面部分:

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        更新前:<br />
        <asp:GridView ID="gridBeforeUpdate" runat="server">
        </asp:GridView>
        StaffID:<asp:TextBox ID="txtStaffID" runat="server"></asp:TextBox>
        &nbsp; StaffName:<asp:TextBox ID="txtStaffName" runat="server"></asp:TextBox><br />
        <asp:Button ID="btnUpdate" runat="server" OnClick="btnUpdate_Click" Text="Update" />&nbsp;<asp:Button
            ID="txtDelete" runat="server" OnClick="txtDelete_Click" Text="Delete" />
        <br />
        <asp:Button ID="btnDeleteByName" runat="server" OnClick="btnDeleteByName_Click" Text="DeleteByName" /><br />
        <br />
        更新后:<br />
        <asp:GridView ID="gridAfterUpdate" runat="server">
        </asp:GridView>
    </div>
    </form>
</body>
</html>
五、代码部分:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            DataSet ds = new DataSet();
            ds = this.GetStaffData();
            this.gridBeforeUpdate.DataSource = ds;
            this.gridBeforeUpdate.DataBind();

        }
    }
    protected void btnUpdate_Click(object sender, EventArgs e)
    {
        string connStr = ConfigurationManager.ConnectionStrings["StaffDBConnectionString1"].ConnectionString;
        SqlConnection conn = new SqlConnection(connStr);
        conn.Open();
        string cmdString = "UPDATE Staff SET StaffName = '"+this.txtStaffName.Text+"' where(StaffID='"+Int32.Parse(this.txtStaffID.Text)+"')";
        SqlCommand cmd = new SqlCommand(cmdString, conn);
        int affectedRows = cmd.ExecuteNonQuery();//使用executeNonQuery()
        string updateResult = cmd.ExecuteScalar().ToString();//使用executeScalar()
        string updateResultbydr=string.Empty;//使用executeReader()
        SqlDataReader dr = cmd.ExecuteReader();
        if (dr.Read())
        {
            updateResultbydr = dr["NameResult"].ToString();
        }
        ClientScript.RegisterClientScriptBlock(typeof(Page), "", "alert('" + affectedRows.ToString() + "\\n" + updateResult + "\\n" + updateResultbydr + "')", true);
        //Response.Write(updateResult);
        conn.Close();
        DataSet ds = this.GetStaffData();
        this.gridAfterUpdate.DataSource = ds;
        this.gridAfterUpdate.DataBind();

    }
    public DataSet GetStaffData()
    {
        string connStr = ConfigurationManager.ConnectionStrings["StaffDBConnectionString1"].ConnectionString;
        SqlConnection conn = new SqlConnection(connStr);
        conn.Open();
        SqlDataAdapter da = new SqlDataAdapter("select * from Staff", conn);
        DataSet ds = new DataSet();
        da.Fill(ds);
        da.Dispose();
        conn.Close();
        return ds;
    }
    protected void txtDelete_Click(object sender, EventArgs e)
    {
        string connStr = ConfigurationManager.ConnectionStrings["StaffDBConnectionString1"].ConnectionString;
        SqlConnection conn = new SqlConnection(connStr);
        conn.Open();
        string cmdString = "DELETE FROM Staff WHERE (StaffID='" + Int32.Parse(this.txtStaffID.Text) + "')";
        SqlCommand cmd = new SqlCommand(cmdString, conn);
        int affectedRows = cmd.ExecuteNonQuery();//使用executeNonQuery()
        ClientScript.RegisterClientScriptBlock(typeof(Page), "", "alert('同时删除了Task表中与Staff表有关系的项\\n共删除的项数为(包括所有被删除的项):" + affectedRows.ToString() + "')", true);
        conn.Close();
        DataSet ds = this.GetStaffData();
        this.gridAfterUpdate.DataSource = ds;
        this.gridAfterUpdate.DataBind();
    }
    protected void btnDeleteByName_Click(object sender, EventArgs e)
    {
        string connStr = ConfigurationManager.ConnectionStrings["StaffDBConnectionString1"].ConnectionString;
        SqlConnection conn = new SqlConnection(connStr);
        conn.Open();
        string cmdString = "DELETE FROM Staff WHERE (StaffName like'" + this.txtStaffName.Text.ToString() + "')";
        SqlCommand cmd = new SqlCommand(cmdString, conn);
        int affectedRows = cmd.ExecuteNonQuery();//使用executeNonQuery()
        ClientScript.RegisterClientScriptBlock(typeof(Page), "", "alert('同时删除了Task表中与Staff表有关系的项\\n共删除的项数为(包括所有被删除的项):" + affectedRows.ToString() + "')", true);
        conn.Close();
        DataSet ds = this.GetStaffData();
        this.gridAfterUpdate.DataSource = ds;
        this.gridAfterUpdate.DataBind();
    }
}


posted on 2008-04-19 21:04  张皓  阅读(319)  评论(0编辑  收藏  举报

导航