1. 只返回单一记录集的存储过程

SqlConnection sqlconn = new SqlConnection(conn);
        SqlCommand cmd = new SqlCommand();
        // 设置sql连接
        cmd.Connection = sqlconn;
        // 如果执行语句
        cmd.CommandText = "Categoriestest1";
        // 指定执行语句为存储过程
        cmd.CommandType = CommandType.StoredProcedure;

SqlDataAdapter dp = new SqlDataAdapter(cmd);
        DataSet ds = new DataSet();
        // 填充dataset
        dp.Fill(ds);
        // 以下是显示效果
        GridView1.DataSource = ds;
        GridView1.DataBind();

存储过程Categoriestest1

CREATE PROCEDURE Categoriestest1 
AS
select * from  Categories
GO

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

c#代码部分

SqlConnection sqlconn = new SqlConnection(conn);
        SqlCommand cmd = new SqlCommand();

cmd.Connection = sqlconn;
        cmd.CommandText = "Categoriestest2";
        cmd.CommandType = CommandType.StoredProcedure;
        sqlconn.Open();
        // 执行并显示影响行数
        Label1.Text = cmd.ExecuteNonQuery().ToString();
        sqlconn.Close();

存储过程Categoriestest2

CREATE PROCEDURE Categoriestest2  AS
insert into dbo.Categories 
(CategoryName,[Description],[Picture])
values ('test1','test1',null)
GO

3. 有返回值的存储过程

c#代码部分

SqlConnection sqlconn = new SqlConnection(conn);
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = sqlconn;
        cmd.CommandText = "Categoriestest3";
        cmd.CommandType = CommandType.StoredProcedure;
        // 创建参数
        IDataParameter[] parameters = {
                new SqlParameter("rval", SqlDbType.Int,4)
            };
        // 将参数类型设置为 返回值类型
        parameters[0].Direction = ParameterDirection.ReturnValue;
        // 添加参数
        cmd.Parameters.Add(parameters[0]);

sqlconn.Open();
        // 执行存储过程并返回影响的行数
        Label1.Text = cmd.ExecuteNonQuery().ToString();
        sqlconn.Close();
        // 显示影响的行数和返回值
        Label1.Text += "-" + parameters[0].Value.ToString() ;

存储过程Categoriestest3

CREATE PROCEDURE Categoriestest3
AS
insert into dbo.Categories 
(CategoryName,[Description],[Picture])
values ('test1','test1',null)
return @@rowcount
GO

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

c#代码部分

SqlConnection sqlconn = new SqlConnection(conn);
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = sqlconn;
        cmd.CommandText = "Categoriestest4";
        cmd.CommandType = CommandType.StoredProcedure;
        // 创建参数
        IDataParameter[] parameters = {
                new SqlParameter("@Id", SqlDbType.Int,4) ,
                new SqlParameter("@CategoryName", SqlDbType.NVarChar,15) ,
            };
        // 设置参数类型
        parameters[0].Direction = ParameterDirection.Output;  // 设置为输出参数
        parameters[1].Value = "testCategoryName";
        // 添加参数
        cmd.Parameters.Add(parameters[0]);
        cmd.Parameters.Add(parameters[1]);

sqlconn.Open();
        // 执行存储过程并返回影响的行数
        Label1.Text = cmd.ExecuteNonQuery().ToString();
        sqlconn.Close();
        // 显示影响的行数和输出参数
        Label1.Text += "-" + parameters[0].Value.ToString() ;

存储过程Categoriestest4

CREATE PROCEDURE Categoriestest4
@id int output,
@CategoryName nvarchar(15)
AS
insert into dbo.Categories 
(CategoryName,[Description],[Picture])
values (@CategoryName,'test1',null)
set  @id = @@IDENTITY
GO

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

c#代码部分

SqlConnection sqlconn = new SqlConnection(conn);
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = sqlconn;
        cmd.CommandText = "Categoriestest5";
        cmd.CommandType = CommandType.StoredProcedure;
        // 创建参数
        IDataParameter[] parameters = {
                new SqlParameter("@Id", SqlDbType.Int,4) ,
                new SqlParameter("@CategoryName", SqlDbType.NVarChar,15) ,
                new SqlParameter("rval", SqlDbType.Int,4)
            };
        // 设置参数类型
        parameters[0].Direction = ParameterDirection.Output;       // 设置为输出参数
        parameters[1].Value = "testCategoryName";                  // 给输入参数赋值
        parameters[2].Direction = ParameterDirection.ReturnValue;  // 设置为返回值
        // 添加参数
        cmd.Parameters.Add(parameters[0]);
        cmd.Parameters.Add(parameters[1]);
        cmd.Parameters.Add(parameters[2]);

sqlconn.Open();
        // 执行存储过程并返回影响的行数
        Label1.Text = cmd.ExecuteNonQuery().ToString();
        sqlconn.Close();
        // 显示影响的行数,输出参数和返回值
        Label1.Text += "-" + parameters[0].Value.ToString() + "-" + parameters[2].Value.ToString();

存储过程Categoriestest5

CREATE PROCEDURE 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

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

c#代码部分

SqlConnection sqlconn = new SqlConnection(conn);
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = sqlconn;
        cmd.CommandText = "Categoriestest6";
        cmd.CommandType = CommandType.StoredProcedure;
        // 创建参数
        IDataParameter[] parameters = {
                new SqlParameter("@Id", SqlDbType.Int,4) ,
                new SqlParameter("@CategoryName", SqlDbType.NVarChar,15) ,
                new SqlParameter("rval", SqlDbType.Int,4)                   // 返回值
            };
        // 设置参数类型
        parameters[0].Direction = ParameterDirection.Output;        // 设置为输出参数
        parameters[1].Value = "testCategoryName";                   // 给输入参数赋值
        parameters[2].Direction = ParameterDirection.ReturnValue;   // 设置为返回值
        // 添加参数
        cmd.Parameters.Add(parameters[0]);
        cmd.Parameters.Add(parameters[1]);
        cmd.Parameters.Add(parameters[2]);

SqlDataAdapter dp = new SqlDataAdapter(cmd);
        DataSet ds = new DataSet();
        // 填充dataset
        dp.Fill(ds);
        // 显示结果集
        GridView1.DataSource = ds.Tables[0];
        GridView1.DataBind();

Label1.Text = "";
        // 显示输出参数和返回值
        Label1.Text +=  parameters[0].Value.ToString() + "-" + parameters[2].Value.ToString();

存储过程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

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

c#代码部分

SqlConnection sqlconn = new SqlConnection(conn);
        SqlCommand cmd = new SqlCommand();
        
        cmd.Connection = sqlconn;
        cmd.CommandText = "Categoriestest7";
        cmd.CommandType = CommandType.StoredProcedure;

SqlDataAdapter dp = new SqlDataAdapter(cmd);
        DataSet ds = new DataSet();
        // 填充dataset
        dp.Fill(ds);
        // 显示结果集1
        GridView1.DataSource = ds.Tables[0];
        GridView1.DataBind();
        // 显示结果集2
        GridView2.DataSource = ds.Tables[1];
        GridView2.DataBind();

存储过程Categoriestest7

CREATE PROCEDURE Categoriestest7
AS
select * from Categories
select * from Categories
GO

c#存储过程的更多相关文章

  1. 将表里的数据批量生成INSERT语句的存储过程 增强版

    将表里的数据批量生成INSERT语句的存储过程 增强版 有时候,我们需要将某个表里的数据全部或者根据查询条件导出来,迁移到另一个相同结构的库中 目前SQL Server里面是没有相关的工具根据查询条件 ...

  2. Dapper逆天入门~强类型,动态类型,多映射,多返回值,增删改查+存储过程+事物案例演示

    Dapper的牛逼就不扯蛋了,答应群友做个入门Demo的,现有园友需要,那么公开分享一下: 完整Demo:http://pan.baidu.com/s/1i3TcEzj 注 意 事 项:http:// ...

  3. MySQL主从环境下存储过程,函数,触发器,事件的复制情况

    下面,主要是验证在MySQL主从复制环境下,存储过程,函数,触发器,事件的复制情况,这些确实会让人混淆. 首先,创建一张测试表 mysql),age int); Query OK, rows affe ...

  4. mysql进阶之存储过程

    往往看别人的代码会有这样的感慨: 看不懂 理还乱 是离愁 别是一番滋味在心头 为什么要使用存储过程? 在mysql开发中使用存储过程的理由: 当希望在不同的应用程序或平台上执行相同的函数,或者封装特定 ...

  5. MySQL 系列(三)你不知道的 视图、触发器、存储过程、函数、事务、索引、语句

    第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 第三篇:MySQL 系列(三)你不知道的 视图.触发器.存储过程.函数 ...

  6. 参数探测(Parameter Sniffing)影响存储过程执行效率解决方案

    如果SQL query中有参数,SQL Server 会创建一个参数嗅探进程以提高执行性能.该计划通常是最好的并被保存以重复利用.只是偶尔,不会选择最优的执行计划而影响执行效率. SQL Server ...

  7. MSSQL 事务,视图,索引,存储过程,触发器

    事务 事务是一种机制.是一种操作序列,它包含了一组数据库操作命令,这组命令要么全部执行,要么全部不执行. 在数据库系统上执行并发操作时事务是作为最小的控制单元来使用的.这特别适用于多用户同时操作的数据 ...

  8. Mysql - 存储过程/自定义函数

    在数据库操作中, 尤其是碰到一些复杂一些的系统, 不可避免的, 会用到函数/自定义函数, 或者存储过程. 实际项目中, 自定义函数和存储过程是越少越好, 因为这个东西多了, 也是一个非常难以维护的地方 ...

  9. SQL Server存储过程

    创建于2016-12-24 16:12:19 存储过程 概念: 1.存储过程是在数据库管理系统中保存的.预先编译的.能实现某种功能的SQL程序,它是数据库应用中运用比较广泛的 一种数据对象. 2.存储 ...

  10. SQL Server 批量删除存储过程

    原理很简单的'drop proc xxx'即可,下面有提供了两种方式来删除存储过程,其实本质是相同的,方法一是生成删除的sql后直接执行了,方法二会生成SQL,但需要检查后执行,个人推荐第二种做法. ...

随机推荐

  1. HDU 4888 Redraw Beautiful Drawings(最大流+判最大流网络是否唯一)

    Problem Description Alice and Bob are playing together. Alice is crazy about art and she has visited ...

  2. ACdream 1128 Maze(费用流)

    题目链接:http://acdream.info/problem?pid=1128 Problem Description wuyiqi陷入了一个迷宫中,这个迷宫是由N*M个格子组成的矩阵.每个格子上 ...

  3. springday03-go1

    springday02项目下新建包annotation11.复制xml文件到包annotation1下,并添加组件扫描方式代码2.Waiter类实现序列化接口,构造函数,并使用特定注解标记waiter ...

  4. AJax 学习笔记二(onreadystatechange的作用)

    AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...

  5. mongodb聚合内存不足解决方案

    原因:mongodb每一个文档默认只有16M.聚合的结果是一个BSON文档,当超过16M大小时,就会报内存不够错误. exceeded memory limit for $group.but didn ...

  6. 夺命雷公狗---node.js---18之项目的构建在node+express+mongo的博客项目3头尾左侧分离法

    在实际的开发中我们的项目往往都是需要头尾分离开来的,居然是后台管理界面当然也不能错过这么好的这步.. 首先我们将我们要分离的部分代码先剪切出来,如下所示: 将他们都弄出来... 这部分的内容分别对应的 ...

  7. 5. 星际争霸之php设计模式--抽象工厂模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  8. How to change Jenkins default folder on Windows?

    http://stackoverflow.com/questions/12689139/how-to-change-jenkins-default-folder-on-windows accepted ...

  9. SqlSever中Index Seek的匹配规则(一)

    我们知道在SqlServer中,索引对查询语句的优化起着巨大的作用,一般来说在执行计划中出现了Index Seek的步骤,我们就认为索引命中了.但是Index Seek中有两个部分是值得我们注意的,我 ...

  10. 数据结构之,线性表去除等于x的元素

    问题看起来很简单,但是这里有个限制,就是算法的时间复杂度位O(n),空间复杂度为O(1),下面上代码 #include <iostream> #include <string.h&g ...