• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
张昊
博客园    首页    新随笔    联系   管理    订阅  订阅
存储过程

存储过程是一组为了完成特定功能能的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();
            }

posted on 2010-11-02 20:28  张昊  阅读(277)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3