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

2018-07-20    来源:open-open

容器云强势上线!快速搭建集群,上万Linux镜像随意使用

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

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

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   

标签: isp 代码 数据库

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。

上一篇:C语言经典算法 - Algorithm Gossip: 费式数列

下一篇:iOS用MPMoviePlayerViewController 播放MP4视频