本文实例讲述了C#调用存储过程的方法。分享给大家供大家参考,具体如下:

CREATE PROCEDURE [dbo].[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

using (SqlConnection conn = new SqlConnection(connStr))

{

try

{

SqlCommand cmd = new SqlCommand("GetNameById", conn);

cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.AddWithValue("@studentid", "09888888");  //给输入参数赋值

SqlParameter parOutput =cmd.Parameters.Add("@studentname", SqlDbType.NVarChar, 50);  //定义输出参数

parOutput.Direction = ParameterDirection.Output;  //参数类型为Output

SqlParameter parReturn = new SqlParameter("@return", SqlDbType.Int);

parReturn.Direction = ParameterDirection.ReturnValue;   //参数类型为ReturnValue

cmd.Parameters.Add(parReturn);

conn.Open();

cmd.ExecuteNonQuery();

MessageBox.Show(parOutput.Value.ToString()); //显示输出参数的值

MessageBox.Show(parReturn.Value.ToString());  //显示返回值

}

catch (System.Exception ex)

{

MessageBox.Show(ex.Message);

}

}

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

#region 执行存储过程

SqlParameter[] param = new SqlParameter[]

{

new SqlParameter("@country",country),

new SqlParameter("@adds",adds),

new SqlParameter("@ynames",ynames),

new SqlParameter("@pids", pids),

new SqlParameter("@cellp",cellp),

new SqlParameter("@cphone", cphone),

new SqlParameter("@amounts",amounts),

new SqlParameter("@cartnumber",cartnumber),

new SqlParameter("@return",SqlDbType.Int)

};

param[8].Direction = ParameterDirection.ReturnValue;

MSCL.SqlHelper.RunProcedure("AddOrderTran", param);

object obj = param[8].Value; //接受返回值

//string connStr = System.Configuration.ConfigurationManager.AppSettings["ConStr"].ToString();

//using (SqlConnection conn = new SqlConnection(connStr))

//{

// conn.Open();

// SqlCommand cmd = new SqlCommand("AddOrderTran", conn);

// cmd.CommandType = CommandType.StoredProcedure;

// SqlParameter para1 = new SqlParameter("@country", country);

// para1.Direction = ParameterDirection.Input; //参数方向 为输入参数

// cmd.Parameters.Add(para1);

// SqlParameter para2 = new SqlParameter("@adds", adds);

// para2.Direction = ParameterDirection.Input;

// cmd.Parameters.Add(para2);

// SqlParameter para3 = new SqlParameter("@ynames", ynames);

// para3.Direction = ParameterDirection.Input;

// cmd.Parameters.Add(para3);

// SqlParameter para4 = new SqlParameter("@pids", pids);

// para4.Direction = ParameterDirection.Input;

// cmd.Parameters.Add(para4);

// SqlParameter para5 = new SqlParameter("@cellp", cellp);

// para5.Direction = ParameterDirection.Input;

// cmd.Parameters.Add(para5);

// SqlParameter para6 = new SqlParameter("@cphone", cphone);

// para6.Direction = ParameterDirection.Input;

// cmd.Parameters.Add(para6);

// SqlParameter para7 = new SqlParameter("@amounts", amounts);

// para7.Direction = ParameterDirection.Input;

// cmd.Parameters.Add(para7);

// SqlParameter para8 = new SqlParameter("@cartnumber", cartnumber);

// para8.Direction = ParameterDirection.Input;

// cmd.Parameters.Add(para8);

// SqlParameter paraReturn = new SqlParameter("@return", SqlDbType.Int);

// paraReturn.Direction = ParameterDirection.ReturnValue; //参数方向 为返回参数

// cmd.Parameters.Add(paraReturn);

// cmd.ExecuteNonQuery();

// object obj = paraReturn;

// if (obj.ToString() == "0")

// {

// //存储过程执行失败

// }

// else

// {

// //成功

// }

//}

//#endregion

本文的数据库用的是sql server自带数据Northwind

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. 没有输入输出的存储过程

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. 有返回值的存储过程

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. 有输入参数和输出参数的存储过程

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. 同时具有返回值、输入参数、输出参数的存储过程

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. 同时返回参数和记录集的存储过程

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. 返回多个记录集的存储过程

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#程序设计有所帮助。

c oracle存储过程返回值,C#调用存储过程详解(带返回值、参数输入输出等)相关推荐

  1. C#调用存储过程详解(带返回值、参数输入输出等)

    C#调用存储过程详解(带返回值.参数输入输出等) 这篇文章主要介绍了C#调用存储过程的方法,结合实例形式详细分析了各种常用的存储过程调用方法,包括带返回值.参数输入输出等,需要的朋友可以参考下 本文实 ...

  2. C语言递归函数(递归调用)详解[带实例演示]

    一个函数在它的函数体内调用它自身称为递归调用,这种函数称为递归函数.执行递归函数将反复调用其自身,每调用一次就进入新的一层,当最内层的函数执行完毕后,再一层一层地由里到外退出. 递归函数不是C语言的专 ...

  3. python修改类的属性值_python 四种方法修改类变量,实例对象调用类方法改变类属性的值,类对象调用类方法改变类属性的值,调用实例方法改变类属性的值,直接修改类属性的值...

    三种方法修改类变量,实例对象调用类方法改变类属性的值,类对象调用类方法改变类属性的值,调用实例方法改变类属性的值,类名就是类对象,city就是类变量, #coding=utf-8 class empl ...

  4. oracle中imp命令详解,ORACLE EXPDP IMPDP数据导入导出命令详解及同EXP IMP命令详细对照...

    ORACLE EXPDP IMPDP数据导入导出命令详解及同EXP IMP 命令详细对比 一.EXPDP IMPDP EXP IMP 可以实现 1.可以实现逻辑备份和逻辑恢复 2.可以在数据库用户之间 ...

  5. 视频教程-Oracle数据库从入门到实用教程详解-Oracle

    Oracle数据库从入门到实用教程详解 全栈工程师,2010年从事软件开发以及软件教育培训工作,至今将近十余年,在项目的开发,设计,到管理上积累了丰富的实战经验,教学风格上通俗易懂,问题解答环节一对一 ...

  6. ulua中lua代码使用反射调用c#详解

    1.官方解释 2.代码层分析 2.1 官方脚本 2.2 语句 luanet.load_assembly('UnityEngine')解析 LuaState lua = new LuaState(); ...

  7. VB静态调用与动态调用dll详解

    [[请注意]]:在以下语法格式中,请注意 [函数名] 的[大小写]!!! 静态与动态比较: 静态调用简单,动态调用麻烦:静态调用占用资源多,动态调用占用资源少:正所谓鱼和熊掌不可兼得. 静态调用定义: ...

  8. java metadata 使用_java 查询oracle数据库所有表DatabaseMetaData的用法(详解)

    一 . 得到这个对象的实例 Connection con ; con = DriverManager.getConnection(url,userName,password); DatabaseMet ...

  9. java 引用传递_详解java的值传递、地址传递、引用传递

    详解java的值传递.地址传递.引用传递 一直来觉得对值传递和地址传递了解的很清楚,刚才在开源中国上看到一篇帖子介绍了java中的值传递和地址传递,看完后感受颇深.下边总结下以便更容易理解. 按照以前 ...

最新文章

  1. 2018-07-09--记录一次gitlab迁移事件及遇到的问题
  2. iOS常用第三方开源框架和优秀开发者博客等
  3. page cache 与free
  4. 30.275MHz 调频无线对讲机原理、制作与调试
  5. 漫画|你还记得原生的JDBC怎么连接数据库吗?
  6. matlab 填充斜线,请教一个关于柱状图的问题--填充采用斜线之类的,不能是颜色...
  7. ospf hello时间和dead_网络工程师_思科 | OSPF由简到难,配合命令学
  8. c语言多线程详,如何用C语言实现多线程
  9. 用FPGA实现视频中物体边缘二值化
  10. web容器 Spring容器 SpringMVC容器 的关系
  11. [转载]如何学习ANSYS?
  12. 因证书问题,Xcode 真机调试时经常遇到的问题
  13. c语言编译器pellc,单片机C语言程序的设计实训100例_基于8051+PROTEUS仿真1
  14. 新型K4宏病毒代码分析报告
  15. Spring AOP动态代理的两种实现方式
  16. O‘REILLY: Reverse Every Ascending —— 将列表中的升序改为降序
  17. php fpm 测试,php-fpm – 配置详解(转)
  18. Web应用服务器——Tomcat的介绍、下载安装、环境配置与使用
  19. EL表达式JSTL标签库小结
  20. 轻量级图片批量上传JS插件 imgFileupload.js

热门文章

  1. FOMO 3D是何方神圣,面对资金盘我们如何自处
  2. Centos 安装sysbench
  3. 10位和13位时间戳
  4. CentOS7增加新用户并授予权限
  5. mobiscroll 日期控件使用
  6. [原创]戒盈祈愿(200509总结)——月记
  7. Qt官方示例-Markdown编辑器
  8. android 动态调试app,Android动态调试
  9. Android之手机卫士
  10. 【JQuery】JQuery绑定事件并传参