C#调用存储过程详解

public static int ExecuteNonQuery(string connStr, string sql, CommandType type, params SqlParameter[] ps)
{
    using (SqlConnection conn = new SqlConnection(connStr))
    {
        using (SqlCommand cmd = new SqlCommand(sql, conn))
        {
            conn.Open();
            if (ps != null)
            {
                cmd.Parameters.AddRange(ps);
            }
            cmd.CommandType = type;
            return cmd.ExecuteNonQuery();
        }

    }
}


/// <summary>
/// 执行存储过程,或SQL语句,返回DataSet
/// </summary>
/// <param name="connStr">数据库连接字符串</param>
/// <param name="cmdText">SQL语句或存储过程名称</param>
/// <param name="ps">参数列表</param>
/// <returns>返回DataSet</returns>
public static DataSet GetDataSet(string connStr, string sql, CommandType type, params SqlParameter[] ps)
{
    DataSet ds = new DataSet();
    try
    {
        using (SqlDataAdapter sda = new SqlDataAdapter(cmdText, connStr))
        {
            if (ps != null)
            {
                sda.SelectCommand.Parameters.AddRange(ps);
            }
            sda.SelectCommand.CommandType = CommandType.StoredProcedure;
            sda.Fill(ds);
        }
        return ds;
    }
    catch (Exception ex)
    {
        ds.Dispose();
        throw (ex);
    }
}
CREATE PROCEDURE [存储过程名称]
 [@输入参数] 数据类型,
 [@输出参数] 数据类型 OUTPUT
AS
BEGIN
[给输出参数赋值]
END

例1:
CREATE PROCEDURE [dbo].[SP_GetNameById]
 @studentid varchar(8),
 @studentname nvarchar(50) OUTPUT
AS
BEGIN
 SELECT @studentname=studentname FROM student
  WHERE studentid=@studentid
 if @@Error<>0
 RETURN -1
 else
 RETURN 0
END
例2:
Create PROCEDURE SP_AddOrderTran
  @country nvarchar(100),
  @adds nvarchar(100),
  @ynames nvarchar(100),
  @pids nvarchar(100),
  @cellp nvarchar(100),
  @cphone nvarchar(100),
  @amounts nvarchar(100),
  @cartnumber nvarchar(100)
as
  Declare @id int
  BEGIN TRANSACTION
    insert into Orders(Order_Country,Order_Adress,Order_UserName,Order_PostID,Cells,Order_Phone,Total_pay,CartNumber,IsPay)
      values (@country,@adds,@ynames,@pids,@cellp,@cphone,@amounts,@cartnumber,'0')
    Select @id=@@identity
    insert into Orders_Item (OrderNumber,ProductsID,Products_Color,Products_Price,Order_Qty,Item_Total)
      select @id,Carts_Item.ProductsID,Carts_Item.Products_Color,Carts_Item.Products_Price,Carts_Item.Item_Qty,Carts_Item.Total_Pay
      from Carts_Item where Carts_Item.CartNumber=@cartnumber
    delete Carts_Item where CartNumber=@cartnumber
    IF @@error <> 0 --发生错误
    BEGIN
      ROLLBACK TRANSACTION
      RETURN 0
    END
    ELSE
    BEGIN
      COMMIT TRANSACTION
      RETURN @id  --执行成功
  END
//执行存储过程
string sql = @"[dbo].[SP_GetNameById]";
SqlParameter[] pars = {
    new SqlParameter("@studentid", SqlDbType.NVarChar,8),
    new SqlParameter("@studentname", SqlDbType.NVarChar, 50),
    new SqlParameter("@return",  SqlDbType.Int)
};
pars[0].Value = "stuid";// 给输入参数赋值
pars[1].Direction = ParameterDirection.Output; //参数类型为Output
pars[2].Direction = ParameterDirection.ReturnValue; //参数类型为ReturnValue
ExecuteNonQuery("数据库连接字符串", sql, CommandType.StoredProcedure, pars);

1、只返回单一数据集的存储过程

--存储过程SP_Categoriestest1
CREATE PROCEDURE SP_Categoriestest1
 AS
 select *
 from Categories
 GO
DataSet ds = GetDataSet("数据库连接字符串", sql, CommandType.StoredProcedure);

2、 没有输入输出的存储过程

--存储过程SP_Categoriestest2
CREATE PROCEDURE SP_Categoriestest2 
AS
 insert into dbo.Categories
 (CategoryName,[Description],[Picture])
 values ('test1','test1',null)
 GO
ExecuteNonQuery("数据库连接字符串", sql, CommandType.StoredProcedure);

3、有返回值的存储过程

--存储过程SP_Categoriestest3
CREATE PROCEDURE SP_Categoriestest3
 AS
 insert into dbo.Categories
 (CategoryName,[Description],[Picture])
 values ('test1','test1',null)
return @@rowcount
 GO
//执行存储过程
string sql = @"SP_Categoriestest3";
SqlParameter[] pars = {
    new SqlParameter("@return",  SqlDbType.Int,4)
};
pars[0].Direction = ParameterDirection.ReturnValue; //参数类型为ReturnValue
ExecuteNonQuery("数据库连接字符串", sql, CommandType.StoredProcedure, pars);

4、有输入参数和输出参数的存储过程

--存储过程SP_Categoriestest4
CREATE PROCEDURE SP_Categoriestest4
 @id int output,
 @CategoryName nvarchar(15)
 AS
 insert into dbo.Categories
 (CategoryName,[Description],[Picture])
 values (@CategoryName,'test1',null)
set @id = @@IDENTITY
 GO
//执行存储过程
string sql = @"SP_Categoriestest4";
SqlParameter[] pars = {
    new SqlParameter("@id", SqlDbType.Int),
    new SqlParameter("@CategoryName", SqlDbType.NVarChar, 50)
};
pars[0].Direction = ParameterDirection.Output;//参数类型为Output
pars[1].Value = "CategoryName"; // 给输入参数赋值
ExecuteNonQuery("数据库连接字符串", sql, CommandType.StoredProcedure, pars);

5、 同时具有返回值、输入参数、输出参数的存储过程

--存储过程SP_Categoriestest5
CREATE PROCEDURE SP_Categoriestest5
 @id int output,
 @CategoryName nvarchar(15)
 AS
 insert into dbo.Categories
 (CategoryName,[Description],[Picture])
 values (@CategoryName,'test1',null)
set @id = @@IDENTITY
return @@rowcount
 GO
//执行存储过程
string sql = @"SP_Categoriestest5";
SqlParameter[] pars = {
    new SqlParameter("@id", SqlDbType.Int),
    new SqlParameter("@CategoryName", SqlDbType.NVarChar, 50),
    new SqlParameter("rval", SqlDbType.Int,4)
};
pars[0].Direction = ParameterDirection.Output;//参数类型为Output
pars[1].Value = "CategoryName"; // 给输入参数赋值
pars[2].Direction = ParameterDirection.ReturnValue;//参数类型为Output
ExecuteNonQuery("数据库连接字符串", sql, CommandType.StoredProcedure, pars);

6、同时返回参数和记录集的存储过程

--存储过程SP_Categoriestest6
CREATE PROCEDURE Categoriestest6
 @id int output,
 @CategoryName nvarchar(15)
 AS
 insert into dbo.Categories
 (CategoryName,[Description],[Picture])
 values (@CategoryName,'test1',null)
set @id = @@IDENTITY
 select * from Categories
return @@rowcount
 GO
//执行存储过程
string sql = @"SP_Categoriestest5";
SqlParameter[] pars = {
    new SqlParameter("@id", SqlDbType.Int),
    new SqlParameter("@CategoryName", SqlDbType.NVarChar, 50),
    new SqlParameter("rval", SqlDbType.Int,4)
};
pars[0].Direction = ParameterDirection.Output;//参数类型为Output
pars[1].Value = "CategoryName"; // 给输入参数赋值
pars[2].Direction = ParameterDirection.ReturnValue;//参数类型为Output
DataSet ds = GetDataSet("数据库连接字符串", sql, CommandType.StoredProcedure, pars);

7、返回多个记录集的存储过程

--存储过程SP_Categoriestest7
CREATE PROCEDURE SP_Categoriestest7
 AS
 select * from Categories
 select * from Categories
 GO
DataSet ds = GetDataSet("数据库连接字符串", sql, CommandType.StoredProcedure);

 

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值