使用C#调用存储过程,用函数合理组织代码,使程

系统 2059 0

虽然调用存储过程并不难实现,但是在程序中合理的组织代码,能使得程序结构更加的明晰,也更加易于维护。

下面的示例将存储过程的调用分为三部分:

1、为调用存储过程准备各种数据:数据库连接字符串、存储过程参数

2、为执行命令准备参数,使用1中的各种数据,建立与数据库的连接,为存储过程的调用准备好参变量和设置变量

3、执行存储过程,如查询操作或更新操作

示例代码如下:

 

    using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Data;

using System.Data.SqlClient;



namespace 使用存储过程

{

    class Program

    {

        //配置连接字符串

        public static string ConnString = @"Data Source=Q-PC\SQLEXPRESS;Integrated Security=SSPI;uid=sa;pwd=;Initial Catalog=hangyun";

        static void Main(string[] args)

        {

            Program p = new Program();



            SqlParameter[] parms = new SqlParameter[] //为存储过程配置参数

            { 

                new SqlParameter("@parms0",SqlDbType.NVarChar),

                new SqlParameter("@parms1",SqlDbType.NVarChar),

                                   .

                                   .

                                   .

                                   .

            };

            //为参数赋值

            parms[0].Value=需要传入存储过程中的值

            parms[1].Value=

            parms[2].Value=

                  .

                  .

                  .

                  .



            p.ExcStoreNonQuery(CommandType.StoredProcedure, "QHC_DomesticCompanyManage", parms);

            Console.ReadLine();

        }



        #region 存储过程执行更新

        ///<summary>

        ///执行一个不需要返回值的SqlCommand命令,通过指定专用的连接字符串。

        /// 使用参数数组形式提供参数列表 

        /// </summary>

        /// <remarks>

        /// 使用示例:

        ///  int result = ExcStoreNonQuery(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));

        /// </remarks>

        /// <param name="connectionString">一个有效的数据库连接字符串</param>

        /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>

        /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>

        /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>

        /// <returns>返回一个数据值表示此SqlCommand命令执行后影响的行数</returns>

        public int ExcStoreNonQuery(string connString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)

        {

            SqlCommand cmd = new SqlCommand();

            SqlConnection conn = new SqlConnection(ConnString);

            try

            {

                //通过PrePareCommand方法将参数逐个传入到SqlCommand的参数集合中

                PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);

                int val = cmd.ExecuteNonQuery();

                //清空SqlCommand中的参数列表

                cmd.Parameters.Clear();

                return val;

            }

            catch (Exception e)

            {

                throw new Exception("执行任务失败:" + e.Message + "   " + cmdText);



            }

            finally

            {

                cmd.Dispose();

                conn.Close();

                conn = null;

            }

        }

        #endregion



        #region 存储过程执行查询

        /// <summary>

        /// 执行一条返回结果集的SqlCommand,通过一个已经存在的数据库连接

        /// 使用参数数组提供参数

        /// </summary>

        /// <remarks>

        /// 使用示例:

        /// DataTable table=StoreGetTable(conn,CommandType.StoredProcedure,"PublishOrders");

        /// </remarks>

        /// <param name="connecttionString">一个现有的数据库连接</param>

        /// <param name="cmdTye">SqlCommand命令类型</param>

        /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param>

        /// <returns>返回一个表(DataTable)表示查询得到的数据集</returns>

        public DataTable StroreGetTable(CommandType cmdTye, string cmdText, params SqlParameter[] commandParameters)

        {

            SqlCommand cmd = new SqlCommand();

            DataTable ds = new DataTable();

            SqlConnection conn = new SqlConnection(ConnString);

            try

            {

                PrepareCommand(cmd, conn, null, cmdTye, cmdText, commandParameters);

                SqlDataAdapter adapter = new SqlDataAdapter();

                adapter.SelectCommand = cmd;

                adapter.Fill(ds);

                //返回一个表集

                return ds;

            }

            catch (Exception e)

            {

                throw new Exception("执行任务失败:" + e.Message + "   " + cmdText);



            }

            finally

            {

                cmd.Dispose();

                conn.Close();

                conn = null;

            }

        }

        #endregion



        #region 为执行命令准备参数

        ///<summary>

        ///为执行命令准备参数

        ///</summary>

        ///<param name="cmd">Sqlcommang命令</param>

        ///<param name="conn">已经存在的数据库连接</param>

        ///<param name="trans">数据库事物处理</param>

        ///<param name="cmdType">SqlCommand命令类型(存储过程,T-Sql语句,等等。)</param>

        ///<param name="cmdText">Command text,T-Sql语句,例如:Select * from sufei</param>

        ///<param name="cmdParms">返回带参数的命令</param>

        private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms)

        {

            //判断数据库连接状态

            if (conn.State != ConnectionState.Open)

                conn.Open();

            cmd.Connection = conn;

            cmd.CommandText = cmdText;

            //判断是否需要事物处理

            if (trans != null)

            {

                cmd.Transaction = trans;

            }



            cmd.CommandType = cmdType;



            if (cmdParms != null)

            {

                foreach (SqlParameter parm in cmdParms)

                    cmd.Parameters.Add(parm);

            }

        }

        #endregion

    }

}turnValue Output 
  


 

 

使用C#调用存储过程,用函数合理组织代码,使程序更加的清晰(示例)


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论