C#中如何执行存储过程方法

 更新时间:2013年04月01日 09:02:25   作者:  
C#中如何执行存储过程方法,需要的朋友可以参考一下

功能 :  根据调用的方法名称  反射动态调用  sql Command 的方法

复制代码 代码如下:

 /// <summary>
    /// 存储过程的属性
    /// ProcName 存储过程的名称
    /// MethodName 执行SqlCommand 方法的名称
    /// PrmList 存储过程的参数
    /// </summary>
    public class ExeProc
    {
        public string ProcName;
        public string MethodName;
        public object[] PrmValue;
    }

根据制定的存储过程的名称

和参数  来执行指定的存储过程 和 调用 sqlCommand 的方法

复制代码 代码如下:

public class DataHelper
    {
        private string connString = null;
        public DataHelper(string conStr)
        {
            this.connString = conStr;
        }
        /// <summary>
        ///  执行存储过程
        /// </summary>
        /// <param name="ep">执行存储过程的属性
        /// ProcName 存储过程的名称
        /// MethodName 执行SqlCommand 方法的名称
        /// PrmList 存储过程的参数
        /// </param>
        /// <returns>返回执行的结果</returns>
        public object ExecProcRetObj(ExeProc ep)
        {
            if (this.connString != null && this.connString != string.Empty)
            {
                try
                {
                    SqlConnection con = new SqlConnection(this.connString);
                    SqlCommand cmd = new SqlCommand();
                    cmd.Connection = con;
                    cmd.CommandText = "Exec " + ep.ProcName + " ";
                    foreach (object obj in ep.PrmValue)
                    {
                        cmd.CommandText += obj + ",";
                    }
                    cmd.CommandText = cmd.CommandText.Remove(cmd.CommandText.Length - 1, 1);
                    Type ty = cmd.GetType();
                    con.Open();

                    //用反射根据输入的方法名 执行对应的方法

                    object retObj = ty.InvokeMember(ep.MethodName, BindingFlags.InvokeMethod, null, cmd, null);
                    if (retObj.GetType().FullName == "System.Data.SqlClient.SqlDataReader")
                    {
                        //将返回的object 转换成DataTable
                        DataTable retDt = new DataTable();
                        retDt.Load(retObj as SqlDataReader);
                        con.Close();
                        con.Dispose();
                        return retDt;
                    }

                    return retObj;
                }
                catch (Exception ex)
                {
                    System.Windows.Forms.MessageBox.Show("获取数据发生错误\n" + ex.Message);
                }

            }
            return null;
        }
    }

相关文章

  • C# wpf实现任意控件更多调整大小功能

    C# wpf实现任意控件更多调整大小功能

    这篇文章主要为大家详细介绍了C# wpf实现任意控件更多调整大小功能的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-01-01
  • C#中获取文件大小问题

    C#中获取文件大小问题

    这篇文章主要介绍了C#中获取文件大小问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • C#泛型类型知识讲解

    C#泛型类型知识讲解

    这篇文章主要介绍了C#泛型类型知识,文中代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-06-06
  • C/C++与Java各数据类型所占字节数的详细比较

    C/C++与Java各数据类型所占字节数的详细比较

    本篇文章主要是对C/C++与Java各数据类型所占字节数进行了详细的对比。需要的朋友可以过来参考下,希望对大家有所帮助
    2014-01-01
  • C#实现悬浮窗口的方法详解

    C#实现悬浮窗口的方法详解

    这篇文章主要为大家详细介绍了C#如何实现悬浮窗口的相关资料,文中的示例代码讲解详细,对我们学习C#有一定的帮助,感兴趣的小伙伴可以了解一下
    2022-12-12
  • c#实现winform屏幕截图并保存的示例

    c#实现winform屏幕截图并保存的示例

    这篇文章主要介绍了c#实现winform屏幕截图并保存的示例,需要的朋友可以参考下
    2014-02-02
  • C#面向对象编程中接口隔离原则的示例详解

    C#面向对象编程中接口隔离原则的示例详解

    在面向对象编程中,SOLID 是五个设计原则的首字母缩写,旨在使软件设计更易于理解、灵活和可维护。本文将通过实例详细讲讲C#面向对象编程中接口隔离原则,需要的可以参考一下
    2022-07-07
  • C#中遍历DataSet数据集对象实例

    C#中遍历DataSet数据集对象实例

    这篇文章主要介绍了C#中遍历DataSet数据集对象实例,经常忘记如何操作DataSet,这里记下来并分享,让需要的朋友可以参考下
    2014-08-08
  • C#飞行棋小程序设计代码

    C#飞行棋小程序设计代码

    这篇文章主要为大家详细介绍了C#飞行棋小程序设计代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • Unity游戏开发中的中介者模式的应用与实现

    Unity游戏开发中的中介者模式的应用与实现

    中介者模式是Unity游戏开发中常用的设计模式之一,用于减少对象之间的直接耦合,通过引入中介者来协调对象之间的交互。通过中介者模式,游戏对象可以更加灵活地进行交互和协同工作,降低系统复杂度,使代码更加易于维护和扩展
    2023-05-05

最新评论