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#中使用强制类型实现字符串和ASCII码之间的转换

    C#中使用强制类型实现字符串和ASCII码之间的转换

    这篇文章主要介绍了C#中使用强制类型实现字符串和ASCII码之间的转换,本文还给出了另一种方法,需要的朋友可以参考下
    2014-08-08
  • C#连接mysql的方法【基于vs2010】

    C#连接mysql的方法【基于vs2010】

    这篇文章主要介绍了C#连接mysql的方法,基于vs2010平台较为详细的讲述了C#操作mysql所需的组件下载、安装及连接mysql操作实现代码,需要的朋友可以参考下
    2017-03-03
  • 浅谈c#.net中巧用ToString()将日期转成想要的格式

    浅谈c#.net中巧用ToString()将日期转成想要的格式

    有时候我们要对时间进行转换,达到不同的显示效果,更多的该怎么办呢?
    2013-03-03
  • C#实现将聊天数据发送加密

    C#实现将聊天数据发送加密

    这篇文章主要为大家详细介绍了如何利用C#实现将聊天数据发送加密的功能,文中的示例代码讲解详细,对我们学习C#有一定的帮助,感兴趣的小伙伴可以跟随小编一起了解一下
    2022-12-12
  • 理解C#中的事件

    理解C#中的事件

    这篇文章主要介绍了理解C#中的事件,本文讲解了使用委托中的问题、事件的出现、深入理解事件、C#属性的概念、事件代码的转换等内容,需要的朋友可以参考下
    2015-02-02
  • C# 反射与dynamic最佳组合示例代码

    C# 反射与dynamic最佳组合示例代码

    这篇文章主要介绍了C# 反射与dynamic最佳组合示例代码,需要的朋友可以参考下
    2017-09-09
  • C#中托管DLL和非托管DLL的区别详解

    C#中托管DLL和非托管DLL的区别详解

    这篇文章主要介绍了C#中托管DLL和非托管DLL的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • Win Form 的 Splitter 使用心得与技巧

    Win Form 的 Splitter 使用心得与技巧

    Win Form 的 Splitter 使用心得与技巧...
    2007-04-04
  • C#中@字符d是个什么意思

    C#中@字符d是个什么意思

    这篇文章主要介绍了C#中@字符d是个什么意思?具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • C#使用whisper.net实现语音识别功能

    C#使用whisper.net实现语音识别功能

    这篇文章主要为大家详细介绍了C#如何使用whisper.net实现语音识别功能,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以学习一下
    2023-11-11

最新评论