正文:
这里使用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; } } }
参考网摘: