存储过程是一组为了完成特定功能能的SQL语句的集合,经过编译后存储在数据库中,用户可以通过指定
存储过程的名字来执行它。
一、为什么要使用存储过程
1.存储过程增强了SQL语言的功能和灵活性。
2.可以保证数据的安全性和完整性。
3.存储过程传输数据时比较简洁直接,可降低网络的通信量。
但是使用存储过程调试起来比较麻烦。当引用关系发生变化时,受影响的存储过程需要从新编译。如
果数据结构发生变化,维护起来相当麻烦。
二、如何定义存储过程
1.最简单的:
creat PROC 存储结构名 as SQL查询语句
2.传参数的:
creat PROC 存储结构名 参数名(@——) 参数类型 as SQL语句
三、如何执行存储过程
exc 存储过程名 参数
四、如何在VS中使用存储过程
1.声明SqlConnection
2.声明SqlCommand,并且设置其Connection属性为刚声明的SqlConnection实例,设置CommandName为存储过程名,CommandType为存储过程。
3.往刚声明的SqlCommand实例的Parameters集合中添加所有的存储过程调用需要的参数 4.呼叫SqlCommand的ExecuteReader()方法来得到存储过程的返回行集
4.声明SqlDataAdapter和DataSet,设置SqlDataAdapter的SelectCommand属性为3中声明的实例,再调用其Fill方法来把返回的行集填充到DataSet中
5.关闭SqlConnection对象
6.释放声明的各对象实例(说明:4指的是两种数据提取方法)在这个调用过程中,我们发现几乎所有的存储过程调用都是这个模式,之间的区别就在第2步中的存储过程名不同和第3步中各个存储过程调用使用的参数是不一样的,他们有参数名字、方向、数据类型、长度等的区别。那么,有没有一种方法可以实现所有的存储过程调用?即只需要提供存储过程名,然后把参数值传入调用方法即可实现存储过程的调用,再用某些数据结构来保存返回的行集、传出参数值、过程返回值。经过研究SQL Server的系统表,我们发现这个想法是切实可行的。
string strcon = "server=.\\sqlexpress;database=数据库名;Trusted_Connection=SSPI";//数据库联机语句
SqlConnection con = new SqlConnection(strcon);//连接数据库
SqlCommand com = new SqlCommand("存储过程名",con);//调用存储过程
com.CommandType = CommandType.StoredProcedure;//验证存储过程
SqlParameter a = new SqlParameter("参数名", "值");//给参数赋值
com.Parameters.Add(a);//添加参数值
con.Open();//打开数据库
SqlDataReader b = com.ExecuteReader();//传值
if (b.Read())
{
Response.Write(b[0].ToString() + b[2].ToString());
con.Close();
}
else
{
con.Close();
}