C#存储过程

using System;
using System.Data;
using System.Data.SqlClient;

这是命名空间,不用多讲解了吧。

 public class DAL       //定义一个类
 {
  string cnstr="data source=.;initial catalog=company;persist security info=False;user id=sa;pwd=sa;";

//定义连接数据库的连接字符串
  private SqlCommand cm=new SqlCommand(); //建立Command对象

//定义一个全局的Command 对象。


  public SqlCommand getCommand    //返回Command对象
  {
   get {return cm;}
  }

  public DAL() //构造函数
  {
   cm.Connection=new SqlConnection(cnstr);
  }

下面是添加存储过程参数的部分

//---------------------------------------------------------
  //添加参数
  //---------------------------------------------------------
 

 如果要执行新的存储过程,需要先清除以前添加的存储过程的参数


  //清除参数
  public void ClearParameter()
  {cm.Parameters.Clear();}

这是一个通用的添加参数的函数。


  //全部的参数
  public void addNewParameter(string ParameterName,string ParameterValue,SqlDbType sqlType,int size,string Direction)
  {  
   cm.Parameters.Add(ParameterName,sqlType,size);   //添加存储过程的参数
   cm.Parameters[ParameterName].Value=ParameterValue;  //负值
   cm.Parameters[ParameterName].Direction=getDirection(Direction);//设置方向
  }

  //方向为输入的
  public void addNewParameter(string ParameterName,string ParameterValue,SqlDbType sqlType,int size)
  {  
   cm.Parameters.Add(ParameterName,sqlType,size);   //添加存储过程的参数
   cm.Parameters[ParameterName].Value=ParameterValue;  //负值
   //cm.Parameters[ParameterName].Direction=getDirection(Direction);//设置方向
   
  }

下面是把常用的几个数据类型提出来,方便操作。

这是专门添加 int 数据类型的参数


  //添加int型的参数
  public void addNewParameter(string ParameterName,int ParameterValue)
  {  
   cm.Parameters.Add(ParameterName,SqlDbType.Int,4);   //添加存储过程的参数
   cm.Parameters[ParameterName].Value=ParameterValue;   //负值
   //设置方向取默认值——输入
  }

这是专门添加 nvarChar 数据类型的参数

  //添加nvarChar型的参数
  public void addNewParameter(string ParameterName,string ParameterValue,int size)
  {  
   cm.Parameters.Add(ParameterName,SqlDbType.NVarChar,size);   //添加存储过程的参数
   cm.Parameters[ParameterName].Value=ParameterValue;   //负值
   //设置方向取默认值——输入的
   
  }

这是专门添加 Bit 数据类型的参数

  //添加bit型的参数
  public void addNewParameter(string ParameterName,bool ParameterValue)
  {  
   cm.Parameters.Add(ParameterName,SqlDbType.Bit);   //添加存储过程的参数
   cm.Parameters[ParameterName].Value=ParameterValue;   //负值
   //设置方向取默认值——输入的
   
  }

如果你还有其他的数据类型也是经常使用的,可以再加相应的函数。

参数加完了,下面就可以运行存储过程了


  //-------------------------------------------------------------
  //    运行、返回记录集
  //-------------------------------------------------------------

通过传入的存储过程的名称来执行存储过程,把返回的记录集放到DataSet里面,如果是多个记录集的话,分别放在Table[0]、Table[1]、Table[2]……


  //运行存储过程返回DataSet
  public DataSet runSPDataSet(string StoredProcedureName)
  { 
   //cm.Connection=new SqlConnection(cnstr);
   cm.CommandText=StoredProcedureName;
   cm.CommandType=CommandType.StoredProcedure;
   try
   {
    SqlDataAdapter da=new SqlDataAdapter(cm);
    DataSet DS=new DataSet();
    da.Fill(DS);
    return DS;
   }
   catch(Exception ex)
   {
    throw ex;
   }
   finally
   {
    cm.Connection.Close();
   }
  }

通过传入的存储过程的名称来执行存储过程,把返回的第一个记录集里的第一条记录放在Object 数组里。多用在显示详细信息里,因为这种情况大多都是只用一条记录的。如果是空的话返回 strValue[0]="null" 。

//运行存储过程返回第一条记录的数组
  public Object[] runSPItems(string StoredProcedureName)
  { 
   Object[] strValue=new Object[1];
   cm.CommandText=StoredProcedureName;
   cm.CommandType=CommandType.StoredProcedure;
   try
   {
    cm.Connection.Open();
    SqlDataReader r =  cm.ExecuteReader(CommandBehavior.CloseConnection);
    if (r.Read())
    {
     strValue=new Object[r.FieldCount];
     r.GetValues(strValue);
    }
    else
    {
     strValue[0]="null";
    }r.Close();
   }
   catch(Exception ex)
   {
    throw ex;
   }
   finally
   {
    cm.Connection.Close();
   }
   return strValue;
  }

如果你想用 DataReader 的话,可以用这个函数返回Command对象,然后用Command.ExecuteReader,最后再用Command.Connection.Close(),关闭连接。应该还有更好的方法吧,总之我是很少用DataReader 的。

//加入存储过程需要的参数,返回command
  public SqlCommand getSPCommand(string StoredProcedureName)
  { 
   //cm.Connection=new SqlConnection(cnstr);
   cm.CommandText=StoredProcedureName;
   cm.CommandType=CommandType.StoredProcedure;
   return cm;
  }

如果只是添加记录不需要返回记录集的话,可以用下面的函数。

//运行存储过程 不返回记录集,用于添加记录,或者是通过存储过程的参数返回数据。
  public string runSP(string ParameterName)
  { 
   //cm.Connection=new SqlConnection(cnstr);
   cm.CommandType=CommandType.StoredProcedure;
   cm.CommandText=ParameterName;
   try
   {
    cm.Connection.Open();
    cm.ExecuteNonQuery();
    cm.Connection.Close();
    return "true";
   }
   catch(Exception ex)
   {
    throw ex;
   }
   finally
   {
    cm.Connection.Close();
   }

  }

存储过程也执行完毕了,那如果有output类型的参数,要取回参数值怎么办呢,那就写个函数来实现吧。

  //按序号返回参数值,一般在执行完存储过程后使用
  public string getParameter(int ParameterIndex)
  {  
   return cm.Parameters[ParameterIndex].Value.ToString();
  }

  //按名称返回参数值
  public string getParameter(string ParameterName)
  {  
   return cm.Parameters[ParameterName].Value.ToString();
  }

posted @ 2014-03-26 14:39  第二职业  阅读(546)  评论(0编辑  收藏  举报