存储过程——存储过程在程序中应用(五)
前几个章节介绍了存储过程的创建,和数据库中的各个关联;那存储过程有这么的的优点,具体在程序中如何应用呢?下面进行详细介绍:
介绍之前必须具备ADO.NET六个核心对象的概念,如不太清楚,可浏览http://www.cnblogs.com/tuqun/p/3654104.html中有详细介绍,ADO.NET简单介绍如下
- ADO.NET核心对象
- Command 命令对象(执行CRUD操作用)
- Connection 连接对象(连接数据库)
- DataAdapter 数据适配器对象(太专业的解释,其实通俗来讲就是一个容器,里面可以存放DataSet、DataTalbe对象)
- DataRead 数据阅读器对象(这个运用比较少,具体啥用处,希望大神们提供具体DEMO指点?)
- DataSet 数据集合对象(类似与数据库,里面可以存放多个DataTable)
- DataTabel 数据表对象(这个就不需要解释了,看字面意思就了解了,通常我们关注里面的ROW,COLUMN)
- 使用命令操作数据库
- 使用命令操作数据库
- 在ADO.NET中调用存储过程
- 必须在指定命令对象执行类型:存储过程
--制定命令对象类型 --存储过程的名称 CommandType.StoredProcedure --SQL 文本命令 CommandType.Text
- 如果存储过程中定义了参数,在应用程序中必须给存储过程传递参数
--传递参数 SqlParameter[] pars = new SqlParameter[] { new SqlParameter("@typeid", typeid) };
- 程序应用如下
- 编写SqlHelper类
public class SqlHelper { /// <summary> /// 连接字符串 /// </summary> private static string strconn = @"data source=Y8OFSI87AJIS7R8\MSSQL;Database=wisdominfo;uid=sa;password=199077"; /// <summary> /// 查询产品信息 /// </summary> /// <param name="sql">查询sql</param> /// <param name="type">查询类型</param> /// <param name="pars">查询参数</param> /// <returns></returns> public static DataTable GetProDuctByTypeId(string sql, CommandType type, SqlParameter[] pars) { SqlConnection cnn = new SqlConnection(strconn); SqlDataAdapter dpt = new SqlDataAdapter(sql, cnn); dpt.SelectCommand.CommandType = type; dpt.SelectCommand.Parameters.AddRange(pars); DataTable dt = new DataTable(); dpt.Fill(dt); return dt; } }
- 编写存储过程
CREATE PROCEDURE GetProByTypeId @typeid int AS BEGIN SELECT a.ID, a.Name, a.Price, a.Address, b.Name AS 品牌 FROM dbo.product AS a INNER JOIN dbo.productType AS b ON a.Type = b.ID where b.ID=@typeid END GO
3. winform窗体后台代码
public Form1() { InitializeComponent(); this.Load += Form1_Load; } void Form1_Load(object sender, EventArgs e) { SqlParameter[] pars = new SqlParameter[] { new SqlParameter("@typeid", 1) }; dataGridView1.DataSource = SqlHelper.GetProDuctByTypeId("GetProByTypeId", CommandType.StoredProcedure, pars); }
总结:
- 不管存储过程还是直接写sql,实际上都需要通过ADO.NET来访问数据,所以对ADO.NET核心对象必须掌握清楚
- 通过存储过程调用,实际上运行速度比在直接写select语句执行效率高
- 通过调用存储过程,在项目维护起来较为方便,在改动程序中的代码较少,只需要在程序中调用的存储过程进行更改,减少了维护难度。
后续对存储过程还会进一步的了解,往大家一如既往的关注,学无止尽。。。