ADO.NET之存储过程的调用

要执行存储过程就必须连接到数据库

代码如下:

            string source = "server=(local) \\SQLEXPRESS;integrated security=SSPI;database=Student";
            SqlConnection con = new SqlConnection(source);//建立一个连接
            con.Open();//打开数据库
            if (con.State == ConnectionState.Open)//ConnectionState为枚举值,描述数据源的连接状态为打开
                Console.WriteLine("数据库连接成功!");

1.调用没有返回值的存储过程之记录的更新

            SqlCommand com = new SqlCommand("studentupdate", con);//创建一条命令,调用命令将要执行在sql 2008中定义好的存储过程
            //接着开始调用存储过程,因为该存储过程中有两个输入参数,所以需要构建两个参数,设置他们的值,然后添加到Parameters(参数集合)中
            com.CommandType = CommandType.StoredProcedure;//com.CommandType:获取或设置一个值,该值指示如何解释 CommandText属性,CommandText属性:对数据源执行的 Transact-SQL 语句、表名或存储过程   CommandType枚举指定如何解释命令字符串
            com.Parameters.AddWithValue("@id", 1);//表示向 SqlParameterCollection 的末尾添加值,SqlParameterCollection表示参数的集合,该语句还可以用com.Parameters.Add(new SqlParameter("@id","id"))代替
            com.Parameters.AddWithValue("@name", "bob");
            int x = com.ExecuteNonQuery();//调用该存储过程
            Console.WriteLine("受影响的行数:{0}", x);
--写好的存储过程必须执行或保存,SqlCommand类才能创建成功
use Student
go
create procedure studentupdate(@id int,@name char(10))
as
set nocount off--当 SET NOCOUNT 为 ON 时,不返回计数(表示受 Transact-SQL 语句影响的行数)。当 SET NOCOUNT 为 OFF 时,返回计数。
update customers
set name=@name
where id=@id; 

2.调用没有返回值的存储过程之记录的删除

            SqlCommand com2 = new SqlCommand("studentdelete", con);
            com2.CommandType = CommandType.StoredProcedure;
            SqlParameter sp = new SqlParameter("@id", SqlDbType.Int, 0, "id");
            com2.UpdatedRowSource = UpdateRowSource.None;//UpdateRowSource枚举:指定如何将查询命令结果应用到正在更新的行,none表示忽略任何返回的参数或行
            com2.Parameters.Add(sp);//将指定的 SqlParameter 对象添加到 SqlParameterCollection 中,参数还没有赋值,而com.Parameters.AddWithValue()已经赋值
            sp.Value = 1;//或者用cmd.Parameters["@id"].value=1
            com2.ExecuteNonQuery();
            Console.WriteLine("删除成功!");
            con.Close();
use Student
drop procedure studentdelete;
go
create procedure studentdelete(@id int)
as
set nocount off
delete from Customers
where id=@id

3.调用没有返回值得存储过程之查询

            SqlCommand com5 = new SqlCommand("selectstudent", con);
            com5.CommandType = CommandType.StoredProcedure;
            com5.Parameters.Add("@id", 5);
            SqlDataReader data=com5.ExecuteReader();
            while (data.Read())
            {
                Console.WriteLine("name:{0} id:{1}", data[0], data[1]);
            }
use Student
drop procedure selectstudent
go
create procedure selectstudent(@id int)
as
select *
from Customers
where id<=@id

4.调用有返回值的存储过程之记录的插入

            SqlCommand com3 = new SqlCommand("studentinsert", con);
            com3.CommandType = CommandType.StoredProcedure;
            com3.Parameters.Add(new SqlParameter("@name", "李四"));
            com3.Parameters.Add(new SqlParameter("@id",SqlDbType.Int,0,ParameterDirection.Output,false,0,0,"id",DataRowVersion.Default,0));
            com3.UpdatedRowSource = UpdateRowSource.OutputParameters;//UpdateRowSource枚举:指定如何将查询命令结果应用到正在更新的行,OutputParameters表示将输出参数映射到dataset中已经更改的行
            com3.ExecuteNonQuery();
            int x = (int)com3.Parameters["@id"].Value;//获得输出参数的方式
            Console.WriteLine("输出参数(下一个id号)为:{0}", x);
use Student
drop procedure studentinsert
go
create procedure studentinsert(@name char(20),@id int output)
as
set nocount off
select @id=MAX(id)+1
from Customers
insert into Customers
values(@name,@id);

5.调用有返回值得存储过程:返回一组记录

            SqlCommand com4 = new SqlCommand("returnstudent", con);
            com4.CommandType = CommandType.StoredProcedure;
            com4.Parameters.Add(new SqlParameter("@id", 3));
            com4.Parameters.Add(new SqlParameter("@rid", SqlDbType.Int, 0, ParameterDirection.Output, false, 0, 0, "id", DataRowVersion.Default, 0));
            com4.Parameters.Add("@rname", SqlDbType.Char, 20).Direction= ParameterDirection.Output;//这种方式可以省略不必要的参数
            com4.ExecuteNonQuery();
            int x = (int)com4.Parameters["@id"].Value;
            string y=com4.Parameters["@rname"].Value.ToString().Trim();
            Console.WriteLine("id:{0} name:{1}",x,y);
use Student
drop procedure returnstudent
go
create procedure returnstudent(@id int,@rid int output,@rname char(20) output)
as
select @rid=id,@rname=Name
from Customers
where id=@id;

ADO.NET之存储过程的调用

时间: 2024-10-14 19:12:22

ADO.NET之存储过程的调用的相关文章

SSIS使用OleDB和Ado.Net两种方式调用 存储过程

在使用"执行 SQL 任务"组件调用存储过程时,连接方式使用OleDB和Ado.Net稍有不同,结合图例说明一下 当我们使用OleDB时,设置的截图如下: 参数使用?来代替,Parameter Name的0代表第一个参数,1代表第二个参数 当我们使用Ado.net 方式的时候,注意要设置IsQueryStoredProcedure为True Sqlstatement 填写存储过程的名字 而参数设置需要和存储过程的参数名字保持一致 就到这了,欢迎大家来补充解释... SSIS使用OleD

JAVA对存储过程的调用方法

博客分类: java java存储过程sql 一:Java如何实现对存储过程的调用:   A:不带输出参数的   ---------------不带输出参数的----------------------------------create procedure getsum@n int =0<--此处为参数-->asdeclare @sum int<--定义变量-->declare @i intset @sum=0set @i=0while @i<[email protecte

JDBC对MySQL数据库存储过程的调用

一.MySQL数据库存储过程: 1.什么是存储过程 存储过程(英文:Stored Procedure)是在大型数据库系统中,为了完毕特定功能而编写的一组的SQL语句集.存储过程经编译存储在数据库中.用户通过指定存储过程的名字并给出參数(假设该存储过程带有參数)来运行它. 2.与一般SQL语句相比.使用存储过程有哪些长处.有哪些缺点 长处: 1).降低了脚本的运行环节,缩短了获取数据的时间.存储过程仅仅在创建的时进行编译,在调用使用的时候直接运行.不需再次编译:而一般SQL语句每次运行前都须要编译

JDBC存储过程的调用

一. JDBC存储过程的调用 (1)存储过程是用SQL语句和控制流语句等编写的一段程序代码,在创建时已被编译成机器代码并存储在数据库中供客户端调用. 存储过程有以下优点: 1.所生成的机器代码被永久存储在数据库中,客户端调用时不需要重新编译,执行起来效率要高一些. 2.存储过程的网络使用效率比等效的SQL 语句要高. (2)JDBC通过java.sql.CallableStatement接口调用数据库服务器中的存储过程: (3)CallableStatement接口继承了PreparedStat

在 SQL Server 的存储过程中调用 Web 服务

介绍 一个老朋友计划开发一个应用,基于 .NET 和 Socket,但需要在存储过程中调用 Web 服务. 在这篇文章中我们将分享这个应用的经验,讲述如何在存储过程中调用 Web 服务,并传递参数. Step 1 首先我们在 Visual Studio 中创建一个 Web 服务项目: Step 2 接下来在服务中添加我们需要的方法,在这里我们创建 6 个方法,分别是 Greet (string Param1) ,HelloWord() , Add, subtract, 和 Divide (Num

Java对存储过程的调用方法 --转载

一.Java如何实现对存储过程的调用: A:不带输出参数的 create procedure getsum @n int =0<--此处为参数--> as declare @sum int<--定义变量--> declare @i int set @sum=0 set @i=0 while @i<=@n begin set @sum=@sum+@i set @i=@i+1 end print 'the sum is '+ltrim(rtrim(str(@sum))) 在SQL

oracle创建函数和调用存储过程和调用函数的例子(区别)

创建函数: 格式:create or replace function func(参数 参数类型) Return number Is Begin --------业务逻辑--------- End; --创建函数 create or replace function func (dno number) return number is t_max number; begin select max(sal) into t_max from emp t where deptno = dno; ret

Oracle 10g实现存储过程异步调用

DBMS_JOB是什么?DBMS_JOB是Oracle数据库提供的专家程序包的一个.主要用来在后台运行程序,是数据库中一个极好的工具. 可用于自动调整调度例程任务,例如分析数据表,执行一些归档操作,清理草稿表等等.使用语法说明.使用DBMS_JOB主例程是SUBMIT例程, 对SUBMIT例程中的各变量含义说明:JOB: 一个作业标识符,由系统来分配(OUT参数).WHAT: 将要运行的SQL文本,必须是有效的PL/SQL语句或一段代码. 例如: 运行存储过程P,可以传递字符串P;(包括分号)给

Sql分页存储过程及调用

Alter Proc P_Page( @TblName varchar(200), --表名 @PageSize int, --每页显示条数 @PageIndex int = 1, --页面索引(页码) @strGetFields varchar(1000)='*', --无传入值,则搜索所有列 @OrderType int = 0, --是否倒序(0=否,1=是) @FldName varchar(100), --以什么条件进行倒叙 @StrWhere varchar(2000), --查询条