zoukankan      html  css  js  c++  java
  • 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();
      }

  • 相关阅读:
    在am中定义消息集束,并在CO中验证之后抛出异常。
    在EORow或者VORow中对数据进行重复性校验
    axis2 webservice jar包使用情况(转)
    std::function以及std::bind
    Qt学习过程
    NULL和nullptr
    清空表且id为0
    C++线程互斥、同步
    warning: deleting 'void *' is undefined 错误
    Classification / Recognition
  • 原文地址:https://www.cnblogs.com/wangyt/p/3625578.html
Copyright © 2011-2022 走看看