C#存储过程中return参数
//1 连接字符串
string connectionString
= "server=127.0.0.1;integrated security=true;database=MSPetShop4";
// = "server=.;uid=sa;pwd=SQL@5;database=AdventureWorks2012";
// = "server=.;user id=sa;password=SQL@5;database=AdventureWorks2012";
//2 实例化数据库连接
System.Data.SqlClient.SqlConnection connection = new SqlConnection(connectionString); //也可以先实例化
//System.Data.SqlClient.SqlConnection connection = new SqlConnection();
//然后再设置ConnectionString 属性.
//connection.ConnectionString = connectionString; try
{
//3 打开连接
connection.Open();
Console.WriteLine("成功连接数据计库MSPetShop4");
//4 数据访问对象
//sql字符串存储过程 string sql = "p_proc_name";
/*
CREATE PROC p_proc_name
(
@pin INT ,
@pout INT OUTPUT
)
AS
DELETE FROM dbo.A
WHERE 客户 = 'biangongxin' IF ( @pin <= 0 )
--return 如果没有写,其值默认为0 ,表示执行成功.
RETURN -1;
--return 之后的语句不执行.
SET @pout = @pin * 100; */
//SqlCommand 表示数据库要执行的sql命令
System.Data.SqlClient.SqlCommand command = new SqlCommand(sql, connection);
//告知数据库现在要执行的是存储过程
//默认为标准SQL语句,可以不用设置.
command.CommandType = CommandType.StoredProcedure; //提供存储过程参数(传入参数) 这里的名称@pin和存储过程中的保持一致
System.Data.SqlClient.SqlParameter pin = new SqlParameter("@pin", System.Data.SqlDbType.Int);
//参数赋值
pin.Value = ;
//将上面的参数加入command中
command.Parameters.Add(pin); //提供存储过程参数(传出参数)这里的名称@pout和存储过程中的保持一致
System.Data.SqlClient.SqlParameter pout = new SqlParameter("@pout", System.Data.SqlDbType.Int); //声明为传出参数 Direction 参数方向 ,默认为传入参数 ParameterDirection.Input
pout.Direction = ParameterDirection.Output; //将上面的参数加入command中
command.Parameters.Add(pout); //return 参数 名称@returnValue随便取,类型固定为int类型.
System.Data.SqlClient.SqlParameter preturn = new SqlParameter("@returnValue",System.Data.SqlDbType.Int);
//声明为传出参数 Direction 参数方向 ,默认为传入参数 ParameterDirection.Input
preturn.Direction = ParameterDirection.ReturnValue;
//return 在存储过程中隐藏的,但是在C#时要显式使用
command.Parameters.Add(preturn); //ExecuteNonQuery 非查询语句
//默认工作在自动事务之下,直接提交
//执行sql DML 之前,手动开启
System.Data.SqlClient.SqlTransaction trans = connection.BeginTransaction();
//设置命令所属的事务管理
command.Transaction = trans;
int result = command.ExecuteNonQuery();
Console.WriteLine(result); // 传出参数 存储过程执行过之后,可以得到传出的参数(存储过程执行的时候,会把sql中的 output的这个参数的值赋值给C#中的 pout)
//传出参数的类型为 object 类型
object obj = pout.Value; //return 参数 存储过程执行过之后,可以得到传出的参数(存储过程执行的时候,会把sql中的 return的这个参数的值赋值给C#中的 preturn
//return 参数类型为固定int 类型
int returnValue = (int)preturn.Value; Console.Write("SQL命令已经提交,但是事务还未提交,是否继续执行(Y/N)");
string ans = Console.ReadLine();
//提交与否@pout值的返回值始终为1000,影响的只是 SQL的 DML操作
if (ans.Substring(, ).ToUpper() == "Y")
{ //提交事务
trans.Commit();
}
else
{
//回滚事务;
trans.Rollback();
} Console.WriteLine("存储过程p_proc_name,return结果为:{0}", returnValue); }
catch(System.Data.SqlClient.SqlException exception)
{
Console.WriteLine(exception.Message);
} finally
{
//4 注销连接
connection.Dispose();
Console.WriteLine("成功断开数据计库MSPetShop4");
}
Console.ReadLine();
C#存储过程中return参数的更多相关文章
- 关于用exec来执行存储过程中,参数带有引号的解决方法
比如:exec 存储过程名 要带有引号的参数 这样写的时候是传不进引号的,可以选定一种字符来表示引号,在存储过程中再进行转换: @test=replace(replace(@test,char(39) ...
- mysql存储过程中字符串参数单引号
注意:存储过程中单引号 ,四个单引号 SET @sql = CONCAT('select user_id into ',m_user_id,' from go_user where mobile = ...
- Mysql存储过程使用LEAVE实现MSSQL存储过程中return语法
DELIMITER $$ USE `qrsoft_dyj_db`$$ DROP PROCEDURE IF EXISTS `proc_withdraw_approve`$$ CREATE PROCEDU ...
- Oracle存储过程中传入参数,传出字符串
create or replace procedure getStr(usercode in varchar2,str out varchar2) is v_sql ); isEdit ); isAd ...
- MyBatis调用存储过程,含有返回结果集、return参数和output参数
Ibatis是我们经常使用的O/R映射框架,mybats是ibatis被Google收购后重新命名的一个工程,当然也做了大量的升级.而调用存储过程也是一次额C/S架构模式下经常使用的手段,我们知道,i ...
- 在论坛中出现的比较难的sql问题:14(存储过程问题 存储过程参数、存储过程内的参数)
原文:在论坛中出现的比较难的sql问题:14(存储过程问题 存储过程参数.存储过程内的参数) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的 ...
- C#调用SQL中的存储过程中有output参数,存储过程执行过程中返回信息
C#调用SQL中的存储过程中有output参数,类型是字符型的时候一定要指定参数的长度.不然获取到的结果总是只有第一字符.本人就是由于这个原因,折腾了很久.在此记录一下,供大家以后参考! 例如: ...
- 存储过程中的output跟return区别及实例说明
存储过程return,表示该存储过程执行到当当前return位置,不再向下执行: 存储过程写法:set ANSI_NULLS ON set QUOTED_IDENTIFIER ON GO ALTER ...
- 在sqlserver存储过程中给in参数传带逗号值的办法,如传'1','2','3'这样的
最近在一项目修改中,要在存储过程中给in参数传值,语句写的也对,但怎么执行都得不出结果,如果把这语句直接赋值.执行,却能得出结果,很是奇怪,如: 直接执行select schoolname from ...
随机推荐
- gogs wekan 集成试用
wekan 官方提供了一个集成gogs 的扩展,不是完全的自动化,需要结合cli,但是官方的cli 写的...(不是很全) 备注: 测试环境使用docker-compose 环境准备 docker-c ...
- Creating Node.js Command Line Utilities to Improve Your Workflow
转自:https://developer.telerik.com/featured/creating-node-js-command-line-utilities-improve-workflow/ ...
- Power consumption comparison
Here is my draft evaluation when old MCU replacement for power consumption, the comparsion betwween ...
- C# WinForm 菜单项的大小、高宽的手动控制
控制菜单项的第一级的下级菜单项的大小: 直接通过(ContextMenuStrip对象).AutoSize = false.(ContextMenuStrip对象).Size = new Size(5 ...
- 适配器(Adapter)
Adapter:将一个Class的接口转换成另一个Class的接口,使原本因接口不兼容而不能合作的Class可以一起运作.主要有两种:迭代器适配器(Iterator Adpater)和容器适配器(Co ...
- Python __slots__的使用
每个类在实例化时都会被分配一个dict,通过 实例.__dict__来访问,dict记录了实例的所有属性 如: class Man(object): pass man = Man()print(man ...
- 原码,反码与补码的概念以及Java中数的存储方式
*原码,反码,补码必须满8位,不足在前填0: 1,原码:用符号位和数值位表示一个带符号的数 + -> 0 - -> 1 表示数的范围-127~ ...
- ubuntu 14上安装mysql离线包
1.下载mysql在linux下离线安装包文件:wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.33-linux-glibc2. ...
- TypeScript 之 基础类型、高级类型
基础类型:https://m.runoob.com/manual/gitbook/TypeScript/_book/doc/handbook/Basic%20Types.html 高级类型:https ...
- Linux crontab配置
crontab配置 1.命令功能 通过crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script脚本.时间间隔的单位可以是分钟.小时.日.月.周及以上的任意组合.这个 ...