黑马程序员——.NET中存储过程的好处

---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! -----------------------

存储过程是使用SQL语言和流程控制语句编写的模块,存储过程经编译和优化存储在数据库服务器端的数据库中,使用时调用即可,存储过程有许多优点:已编译性使得它的运行速度更快、简化了程序逻辑、间接的安全控制功能等。

1.     存储过程的创建

CREATE PROCEDURE Procedure_Name
--参数列表
AS
BEGIN
--执行语句
END
GO


 

2.非存储过程的数据操作(以插入为例)

 

private void btnInsert_Click(object sender, EventArgs e)
        {
            string strConn = ConfigurationManager.ConnectionStrings["myConnString"].ConnectionString;

            SqlConnection conn = new SqlConnection(strConn);
            
            SqlCommand cmd = conn.CreateCommand();
            cmd.CommandText = "INSERT INTO dbo.T_Admins(UserName,Password) VALUES(@username,@password)";
            cmd.Parameters.AddRange(new SqlParameter[]{
                new SqlParameter("username",txtUserName.Text.Trim()),
                new SqlParameter("password",txtPassword.Text.Trim())
            });

            conn.Open();
            int line = cmd.ExecuteNonQuery();
            if (line == 1)
            {
                MessageBox.Show("插入成功!");
            }
        }

注:只是为了作为演示,并未考虑链接的关闭、资源的释放和异常处理。

3.存储过程的数据操作

创建存储过程:

CREATE PROCEDURE msp_InsertIntoAdmins
(
	@username nvarchar(50),
	@password nvarchar(50)
)
AS
BEGIN
	INSERT INTO dbo.T_Admins(UserName,[Password]) VALUES(@username,@password)
END
GO

应用程序:

private void btnInsert_Click(object sender, EventArgs e)
        {
            string strConn = ConfigurationManager.ConnectionStrings["myConnString"].ConnectionString;

            SqlConnection conn = new SqlConnection(strConn);
            
            SqlCommand cmd = conn.CreateCommand();
            cmd.CommandText = "msp_InsertIntoAdmins";
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddRange(new SqlParameter[]{
                new SqlParameter("username",txtUserName.Text.Trim()),
                new SqlParameter("password",txtPassword.Text.Trim())
            });

            conn.Open();
            int line = cmd.ExecuteNonQuery();
            if (line == 1)
            {
                MessageBox.Show("插入成功!");
            }
        }

可以看到使用存储过程的程序只有两处不同:

cmd.CommandText = "msp_InsertIntoAdmins";
cmd.CommandType = CommandType.StoredProcedure;

Command对象的CommandText属性不再是SQL语句而是存储过程的名字,CommandType属性改为了StoredProcedure(默认为Text)

这里唯一可见的好处是,我们不用再将复杂的SQL语句写在程序代码中了,但是这并没有完全体现存储过程的使用在应用程序的编写中带来的好处,这需要一个复杂点的例子。

假如现在我们有三张表:图书信息表、借阅记录表和还书记录表,现在要删除图书信息表中的某条记录,我们知道有外键约束的条件下要想删除图书信息,必须先将该图书在借阅信息表和还书信息表中的数据进行删除,那我们就不得不在程序中执行三次Command命令,可以想象那是多么繁琐的事情!

而如果用到了存储过程,只需要将删除逻辑写在数据库服务器端中,使用时直接调用存储过程就可以了。

以上是小弟对存储过程的一点认识,有错误的地方希望大家指正。
--------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ----------------------

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值