• 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();
      }
  • 相关阅读:
    2013年10月17日 搬出来了
    如何与领导相处
    WEB系统开发
    C++ 常用术语(后续补充)
    C++ 构造函数放置默认转换explicit关键字(2)
    工作与生活
    C++类型转化分析(1)
    (一)win7下cocos2d-x 21 + vs2010
    为了生活
    iOS
  • 原文地址:https://www.cnblogs.com/longyi/p/2293465.html
Copyright © 2020-2023  润新知