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();
      }
  • 相关阅读:
    zbb20181207 springboot @ConfigurationProperties使用
    zbb20181206 logback,lombok 默认日志logback配置解析
    Spring Boot (8) 全局异常处理
    Spring Boot (7) JdbcTemplate访问数据库
    Spring Boot (6) Spring Data JPA
    Spring Boot (4) 静态页面和Thymeleaf模板
    Spring Boot (3) 热部署devtools
    Spring Boot (2) Restful风格接口
    Spring Boot (1) 构建第一个Spring Boot工程
    idea使用maven搭建ssm框架实现登陆商品增删改查
  • 原文地址:https://www.cnblogs.com/longyi/p/2293465.html
Copyright © 2011-2022 走看看