zoukankan      html  css  js  c++  java
  • 存储过程——存储过程在程序中应用(五)

    前几个章节介绍了存储过程的创建,和数据库中的各个关联;那存储过程有这么的的优点,具体在程序中如何应用呢?下面进行详细介绍:

    介绍之前必须具备ADO.NET六个核心对象的概念,如不太清楚,可浏览http://www.cnblogs.com/tuqun/p/3654104.html中有详细介绍,ADO.NET简单介绍如下

    • ADO.NET核心对象
    1. Command 命令对象(执行CRUD操作用)
    2. Connection 连接对象(连接数据库)
    3. DataAdapter 数据适配器对象(太专业的解释,其实通俗来讲就是一个容器,里面可以存放DataSet、DataTalbe对象)
    4. DataRead 数据阅读器对象(这个运用比较少,具体啥用处,希望大神们提供具体DEMO指点?)
    5. DataSet 数据集合对象(类似与数据库,里面可以存放多个DataTable)
    6. DataTabel 数据表对象(这个就不需要解释了,看字面意思就了解了,通常我们关注里面的ROW,COLUMN)
    • 使用命令操作数据库

     

    • 使用命令操作数据库

    • 在ADO.NET中调用存储过程
    1. 必须在指定命令对象执行类型:存储过程
    --制定命令对象类型
    --存储过程的名称
    CommandType.StoredProcedure
    --SQL 文本命令
    CommandType.Text
    1. 如果存储过程中定义了参数,在应用程序中必须给存储过程传递参数
    --传递参数
    SqlParameter[] pars = new SqlParameter[] { new SqlParameter("@typeid", typeid) };
    • 程序应用如下

      1. 编写SqlHelper类
            public class SqlHelper
            {
                /// <summary>
                /// 连接字符串
                /// </summary>
                private static string strconn = @"data source=Y8OFSI87AJIS7R8MSSQL;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;
                }
            }
    1. 编写存储过程
    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);
            }


    总结:

    1. 不管存储过程还是直接写sql,实际上都需要通过ADO.NET来访问数据,所以对ADO.NET核心对象必须掌握清楚
    2. 通过存储过程调用,实际上运行速度比在直接写select语句执行效率高
    3. 通过调用存储过程,在项目维护起来较为方便,在改动程序中的代码较少,只需要在程序中调用的存储过程进行更改,减少了维护难度。

    后续对存储过程还会进一步的了解,往大家一如既往的关注,学无止尽。。。

  • 相关阅读:
    Flush输出表格内容
    [From Linux Toy] inxi– bash script to get system information
    .NET中Mocking框架的对比
    Python中的对象和动态性 [菜鸟的理解,高手莫入]
    《正见 佛陀的证悟》读书摘记 (1)
    Quote for tomorrow
    不抱怨就会死
    web deploy + windows server 2008 r2 64bit + iis 7.5
    bootsnipp
    [转载] A Beginner's Guide to HTTP Cache Headers
  • 原文地址:https://www.cnblogs.com/tuqun/p/3659802.html
Copyright © 2011-2022 走看看