正文:
 这里使用Ado.NET中的SqlCommond来执行存储过程。
 需要注意的是,cmd的类型CommondType,因为我们要在这里指定为存储过程之后,我们才可以将cmd当作存储过程来调用。
 存储过程的返回值也需要注意,如果有返回值的话,一定不要将类型写错了~
 对于传入参数,有的人习惯一个一个加,有的人习惯用数组,我习惯用List,然后整体加到参数里面去。这几种方法都是可行的,差别应该是在对于内存的使用方面,是否需要对内存的控制加强到这个地步,还是要看所做的项目需要了。
  
 参考代码:
 
 using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Data.Common;
namespace csdemo.basic.AdoDemo
{
    /// <summary>
    /// 存储过程操作DEMO
    /// </summary>
    public class DataProcedureDemo
    {
        /// <summary>
        /// 测试存储过程是否可以使用
        /// </summary>
        /// <param name="procedureName">存储过程名称</param>
        /// <param name="conn">数据连接</param>
        /// <returns>是否可以正常使用</returns>
        public bool ProcedureTest(string procedureName,SqlConnection conn)
        {
            List<SqlParameter> parm = new List<SqlParameter>();
            // 输入参数
            parm[0] = new SqlParameter();
            parm[0].ParameterName = "@Id";
            parm[0].SqlDbType = SqlDbType.UniqueIdentifier;
            parm[0].Value = new Guid(); 
            parm[0].Direction = ParameterDirection.Input;   // 定义参数IO类型
            parm[1] = new SqlParameter();
            parm[1].ParameterName = "@Name";
            parm[1].SqlDbType = SqlDbType.Char;
            parm[1].Size = 20;
            parm[1].Value = "峻之岭峰";
            parm[1].Direction = ParameterDirection.Input;
            parm[2] = new SqlParameter();
            parm[2].ParameterName = "@Birthday";
            parm[2].SqlDbType = SqlDbType.Date;
            parm[2].Value = DateTime.Now.ToString("MMdd");
            parm[2].Direction = ParameterDirection.Input;
            // 输出参数
            parm[3] = new SqlParameter();
            parm[3].ParameterName = "@Result";
            parm[3].SqlDbType = SqlDbType.Int;
            parm[3].Direction = ParameterDirection.Output;
            // 执行命令定义
            SqlCommand cmd = new SqlCommand();
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Connection = conn;
            cmd.CommandText = procedureName;
            cmd.Parameters.Add(parm);   // 添加参数到命令
            if (conn.State == ConnectionState.Closed)
            {
                conn.Open();
            }
            bool result = false;
            try
            {
                cmd.ExecuteNonQuery();  // 执行存储过程调用
                result = true;
                // 这个方法里面没有用到,用于填充DataSet
                DataSet ds = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter();
                da.SelectCommand = cmd;
                da.Fill(ds);
            }
            catch
            {
            }
            finally
            {
                conn.Close();
            }
            return result;
        }
    }
}
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Data.Common;
namespace csdemo.basic.AdoDemo
{
    /// <summary>
    /// 存储过程操作DEMO
    /// </summary>
    public class DataProcedureDemo
    {
        /// <summary>
        /// 测试存储过程是否可以使用
        /// </summary>
        /// <param name="procedureName">存储过程名称</param>
        /// <param name="conn">数据连接</param>
        /// <returns>是否可以正常使用</returns>
        public bool ProcedureTest(string procedureName,SqlConnection conn)
        {
            List<SqlParameter> parm = new List<SqlParameter>();
            // 输入参数
            parm[0] = new SqlParameter();
            parm[0].ParameterName = "@Id";
            parm[0].SqlDbType = SqlDbType.UniqueIdentifier;
            parm[0].Value = new Guid(); 
            parm[0].Direction = ParameterDirection.Input;   // 定义参数IO类型
            parm[1] = new SqlParameter();
            parm[1].ParameterName = "@Name";
            parm[1].SqlDbType = SqlDbType.Char;
            parm[1].Size = 20;
            parm[1].Value = "峻之岭峰";
            parm[1].Direction = ParameterDirection.Input;
            parm[2] = new SqlParameter();
            parm[2].ParameterName = "@Birthday";
            parm[2].SqlDbType = SqlDbType.Date;
            parm[2].Value = DateTime.Now.ToString("MMdd");
            parm[2].Direction = ParameterDirection.Input;
            // 输出参数
            parm[3] = new SqlParameter();
            parm[3].ParameterName = "@Result";
            parm[3].SqlDbType = SqlDbType.Int;
            parm[3].Direction = ParameterDirection.Output;
            // 执行命令定义
            SqlCommand cmd = new SqlCommand();
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Connection = conn;
            cmd.CommandText = procedureName;
            cmd.Parameters.Add(parm);   // 添加参数到命令
            if (conn.State == ConnectionState.Closed)
            {
                conn.Open();
            }
            bool result = false;
            try
            {
                cmd.ExecuteNonQuery();  // 执行存储过程调用
                result = true;
                // 这个方法里面没有用到,用于填充DataSet
                DataSet ds = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter();
                da.SelectCommand = cmd;
                da.Fill(ds);
            }
            catch
            {
            }
            finally
            {
                conn.Close();
            }
            return result;
        }
    }
}
 
参考网摘:
- C#调用存储过程的通用类 
- C#调用存储过程两种方法 
- C#调用存储过程简单完整例子 
- C#存储过程调用