正文:
这里使用Ado.NET中的SqlCommond来执行存储过程。
需要注意的是,cmd的类型CommondType,因为我们要在这里指定为存储过程之后,我们才可以将cmd当作存储过程来调用。
存储过程的返回值也需要注意,如果有返回值的话,一定不要将类型写错了~
对于传入参数,有的人习惯一个一个加,有的人习惯用数组,我习惯用List,然后整体加到参数里面去。这几种方法都是可行的,差别应该是在对于内存的使用方面,是否需要对内存的控制加强到这个地步,还是要看所做的项目需要了。
参考代码:
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
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#存储过程调用