行為儲存過程(23)

weixin_34026276發表於2017-11-14
行為儲存過程適用於執行某些資料庫功能,但不返回記錄或值。這些資料庫功能包括對資料的更新、編輯和修改、
下面通過一個行為儲存過程實習成績表grade中插入一天新的記錄和功能,定義了@stud_id、引數@course和@score、在向表中插入時,
需要先判斷表中是否有相同的記錄。如果存在 則不插入該記錄,並給出相應的提示資訊,否則插入該記錄。
儲存過程add_grade的程式碼如下:
create procedure add_grade
@stud_id char(9),
@course varchar(50),
@score int
as
declare @recordcount int
set @recordcount=
(
select count(*) from grade
where stud_id=@stud_id and
course=@course
)
if @recordcount<1
begin
insert into grade
values(@stud_id,@course,@score)
end
 
 
然後在編輯的頁面編寫如下程式碼
~~~~~~~~~~~
 using System.Data.SqlClient;
namespace 行為儲存過程
{
public partial class _Default : System.Web.UI.Page
{
override protected void OnInit( EventArgs e)
{
InitializeComponent();
base.OnInit(e);
}

private void InitializeComponent()
{
this.Button1.Click += new System.EventHandler
(this.Button1_Click);
}

protected void Button1_Click(object sender, EventArgs e)
{
string conncetionstring = "Data Source=神舟龍-PC\\SQLEXPRESS;Initial Catalog=student;Integrated Security=True;";
SqlConnection conn=new SqlConnection (conncetionstring);
SqlCommand comm=new SqlCommand ("add_grade",conn);//呼叫已經定義好的add_grade儲存過程
comm.CommandType=CommandType.StoredProcedure;
comm.Parameters.Add(new SqlParameter("@stu_id",this.TextBox1.Text));
comm.Parameters.Add(new SqlParameter("@course",this.TextBox2.Text));
comm.Parameters.Add(new SqlParameter("@score",this.TextBox3.Text));
try
{
conn.Open();
comm.ExecuteNonQuery();//呼叫comm物件的ExecuteNonQuery方法來執行儲存過程以新增學生成績,並給出操作提示。
this.Page.RegisterStartupScript("message", "<script>alert('新增成功')</script>");//程式碼有點過時了!汗,以後爭取不出現這種情況
}
catch
{
this.Page.RegisterStartupScript("message","<script>alert('新增失敗')</script>");
}
finally
{
conn.Close();
}
}



}
}
通過呼叫儲存過程,不僅速度快,安全性高,而且除錯容易,特別是複雜的商業邏輯操作,使用儲存過程不僅容易實現,而且大大減少程式碼程式設計量,更加體現儲存過 程的優勢。
神舟龍

本文轉自shenzhoulong  51CTO部落格,原文連結:http://blog.51cto.com/shenzhoulong/321064,如需轉載請自行聯絡原作者

相關文章