zoukankan      html  css  js  c++  java
  • c#调用存储过程

    http://www.cnblogs.com/zxtceq/p/5956808.html

    存储过程(Stored Procedure)即用来存储数据表操作的一个过程,是把对数据表操作的方法存储到一起的一个对象,是存储在数据库中。

    优点:1.降低网络传输数据量:通过存储过程的名称和参数传递即可调用执行,不用传输sql。

    2.执行效率高:sqlserver会事先将存储过程编译成可执行的二进制代码,运行存储过程时,无需再次编译。

    3.封装性:也可叫模块式编程,将实现某种功能的多条sql封装到一个对象中,可多次重复调用,可移植性强。

    4.安全:可针对不同的权限的用户使用不同的存储过程。

    下面讲C#如何调用写好的存储过程,下面是对数据操作封装几个函数

    //执行对表的增删改操作的sql语句
    public static int ExecuteCommand(string text)
            {
                using (SqlConnection conn = new SqlConnection(connectionString))
                {
                    conn.Open();
                    using (SqlCommand cmd = new SqlCommand(text, conn))
                    {
                        int i = cmd.ExecuteNonQuery();
                        return i;
                    }               
                }            
            }
    
    public static int ExecStoredProcedure(string procName, params SqlParameter[] parameters)
            {
                int rtn = 0;
                using (SqlConnection conn = new SqlConnection(connectionString))
                {
                    conn.Open();
                    using (SqlCommand cmd = conn.CreateCommand())
                    {                   
                        SqlTransaction st = conn.BeginTransaction();
                        cmd.Transaction = st;
                        try
                        {
                            cmd.CommandText = procName;
                            cmd.CommandType = CommandType.StoredProcedure;
                            cmd.Parameters.AddRange(parameters);
                            rtn= cmd.ExecuteNonQuery();
                            st.Commit();
                            return rtn;
                        }
                        catch(SqlException sqlex)
                        {
                            st.Rollback();
                            throw sqlex;
                        }                                       
                    }
                }
            }
            public static int ExecuteStoredProcedure(string procName,
                params SqlParameter[] parameters)
            {
                using (SqlConnection conn = new SqlConnection(connectionString))
                {
                    conn.Open();
                    using (SqlCommand cmd = conn.CreateCommand())
                    {
                        cmd.CommandText = procName;
                        cmd.CommandType = CommandType.StoredProcedure;
                        cmd.Parameters.AddRange(parameters);
                        return cmd.ExecuteNonQuery();
                    }
                }
                
            }

    推荐用第三种方式,用到了事务处理,若只要有一条不通过全部回滚,避免脏数据的产生。也可以在存储过程中使用事务,后续会继续更新...

    protected void Button1_Click(object sender, EventArgs e)
        {
            string mainName = "圆梦组";
            string detailName="刘能|赵本山|沈燕|欧阳锋";
            string detailAge="23|32|18|19";
            int rtn=DBHelper.ExecuteCommand(string.Format("exec dbo.Proc_TestBatchMainDetailIns '{0}','{1}','{2}'", mainName, detailName,detailAge));
        }
        protected void Button2_Click(object sender, EventArgs e)
        {
            string mainName = "起航组2";
            string detailName="段毅2|乔峰2|杨过2|李莫愁2";
            string detailAge="18|28|jj|35";
            SqlParameter[] sps = new SqlParameter[] { 
            new SqlParameter("@mainName",mainName),
                new SqlParameter("@detailNameStr",detailName),
                 new SqlParameter("@detailAgeStr",detailAge)
            };
            try
            {           
                int rtn = DBHelper.ExecuteStoredProcedure("dbo.Proc_TestBatchMainDetailIns", sps);
            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }
            
        }
        protected void Button3_Click(object sender, EventArgs e)
        {
            string mainName = "起航组2";
            string detailName = "段毅2|乔峰2|杨过2|李莫愁2";
            string detailAge = "18|28|jj|35";
            SqlParameter[] sps = new SqlParameter[] { 
            new SqlParameter("@mainName",mainName),
                new SqlParameter("@detailNameStr",detailName),
                 new SqlParameter("@detailAgeStr",detailAge)
            };
            try
            {
                int rtn = DBHelper.ExecStoredProcedure("dbo.Proc_TestBatchMainDetailIns", sps);
            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }
        }
    
    protected void Button1_Click(object sender, EventArgs e)
        {
            string mainName = "圆梦组";
            string detailName="刘能|赵本山|沈燕|欧阳锋";
            string detailAge="23|32|18|19";
            int rtn=DBHelper.ExecuteCommand(string.Format("exec dbo.Proc_TestBatchMainDetailIns '{0}','{1}','{2}'", mainName, detailName,detailAge));
        }
        protected void Button2_Click(object sender, EventArgs e)
        {
            string mainName = "起航组2";
            string detailName="段毅2|乔峰2|杨过2|李莫愁2";
            string detailAge="18|28|jj|35";
            SqlParameter[] sps = new SqlParameter[] { 
            new SqlParameter("@mainName",mainName),
                new SqlParameter("@detailNameStr",detailName),
                 new SqlParameter("@detailAgeStr",detailAge)
            };
            try
            {           
                int rtn = DBHelper.ExecuteStoredProcedure("dbo.Proc_TestBatchMainDetailIns", sps);
            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }
            
        }
        protected void Button3_Click(object sender, EventArgs e)
        {
            string mainName = "起航组2";
            string detailName = "段毅2|乔峰2|杨过2|李莫愁2";
            string detailAge = "18|28|jj|35";
            SqlParameter[] sps = new SqlParameter[] { 
            new SqlParameter("@mainName",mainName),
                new SqlParameter("@detailNameStr",detailName),
                 new SqlParameter("@detailAgeStr",detailAge)
            };
            try
            {
                int rtn = DBHelper.ExecStoredProcedure("dbo.Proc_TestBatchMainDetailIns", sps);
            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }
        }
  • 相关阅读:
    Codeforces Round #646 (Div. 2)【B. Subsequence Hate题解】
    关于MyBatis常见映射异常
    SQL语句汇总(终篇)—— 表联接与联接查询【转载自https://www.cnblogs.com/ghost-xyx/p/3813688.html】
    SQL语句汇总(二)——数据修改、数据查询【转载自https://www.cnblogs.com/ghost-xyx/p/3798362.html】
    浮动元素引起的问题和解决办法
    PHP 神奇的sprintf函数
    关于this,作用域,属性,原型链的一个小练习
    for...of 与 for...in 区别
    ES6 Promise对象then方法链式调用
    ES6通过WeakMap解决内存泄漏问题
  • 原文地址:https://www.cnblogs.com/herizai/p/7207056.html
Copyright © 2011-2022 走看看