//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参数的更多相关文章

  1. 关于用exec来执行存储过程中,参数带有引号的解决方法

    比如:exec 存储过程名 要带有引号的参数 这样写的时候是传不进引号的,可以选定一种字符来表示引号,在存储过程中再进行转换: @test=replace(replace(@test,char(39) ...

  2. mysql存储过程中字符串参数单引号

    注意:存储过程中单引号  ,四个单引号 SET @sql = CONCAT('select user_id into ',m_user_id,' from go_user where mobile = ...

  3. Mysql存储过程使用LEAVE实现MSSQL存储过程中return语法

    DELIMITER $$ USE `qrsoft_dyj_db`$$ DROP PROCEDURE IF EXISTS `proc_withdraw_approve`$$ CREATE PROCEDU ...

  4. Oracle存储过程中传入参数,传出字符串

    create or replace procedure getStr(usercode in varchar2,str out varchar2) is v_sql ); isEdit ); isAd ...

  5. MyBatis调用存储过程,含有返回结果集、return参数和output参数

    Ibatis是我们经常使用的O/R映射框架,mybats是ibatis被Google收购后重新命名的一个工程,当然也做了大量的升级.而调用存储过程也是一次额C/S架构模式下经常使用的手段,我们知道,i ...

  6. 在论坛中出现的比较难的sql问题:14(存储过程问题 存储过程参数、存储过程内的参数)

    原文:在论坛中出现的比较难的sql问题:14(存储过程问题 存储过程参数.存储过程内的参数) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的 ...

  7. C#调用SQL中的存储过程中有output参数,存储过程执行过程中返回信息

      C#调用SQL中的存储过程中有output参数,类型是字符型的时候一定要指定参数的长度.不然获取到的结果总是只有第一字符.本人就是由于这个原因,折腾了很久.在此记录一下,供大家以后参考! 例如: ...

  8. 存储过程中的output跟return区别及实例说明

    存储过程return,表示该存储过程执行到当当前return位置,不再向下执行: 存储过程写法:set ANSI_NULLS ON set QUOTED_IDENTIFIER ON GO ALTER ...

  9. 在sqlserver存储过程中给in参数传带逗号值的办法,如传'1','2','3'这样的

    最近在一项目修改中,要在存储过程中给in参数传值,语句写的也对,但怎么执行都得不出结果,如果把这语句直接赋值.执行,却能得出结果,很是奇怪,如: 直接执行select schoolname from ...

随机推荐

  1. IntelliJ IDEA 快捷键说明大全(中英对照、带图示详解)

    因为觉得网络上的 idea 快捷键不够详尽,所以特别编写了此篇文章,方便大家使用 idea O(∩_∩)O~ 其中的英文说明来自于 idea 的官网资料,中文说明主要来自于自己的领会和理解,英文说明只 ...

  2. java文件夹相关操作 演示样例代码

    java文件夹相关操作 演示样例代码 package org.rui.io; import java.io.File; import java.io.FilenameFilter; import ja ...

  3. 我发起了一个 .Net 平台上的 NewSql 数据库 BabanaDB

    发起这个项目的起因, 是偶然看到一个网友发的 MongoDB 的 新闻, 我想, 像  MongoDB  这样的 非关系数据库 ,随时 都可以写 很多个, 真正 难写 的 是  关系数据库, 非关系数 ...

  4. Springboot技术点汇总

    1. Springboot+MyBatis+druid 在启动类上面,添加注释@Configuration以及@ImportResource(location={"classpath:con ...

  5. 大数据框架对比:Hadoop、Storm、Samza、Spark和Flink--容错机制(ACK,RDD,基于log和状态快照),消息处理at least once,exactly once两个是关键

    分布式流处理是对无边界数据集进行连续不断的处理.聚合和分析.它跟MapReduce一样是一种通用计算,但我们期望延迟在毫秒或者秒级别.这类系统一般采用有向无环图(DAG). DAG是任务链的图形化表示 ...

  6. ASP.NET AJAX入门系列(9):在母版页中使用UpdatePanel

    本文简单介绍一下在母版页中使用UpdatePanel控件,翻译自官方文档. 主要内容 1.添加UpdatePanel控件到Content Page 2.通过Master Page刷新UpdatePan ...

  7. 关于Firedac的一点看法

    Firedac集成在Delphi中已经有几个版本了,偶尔也拖到Form上试着用用,虽然知道Firedac有可能是最终的(或很很长时间内)数据访问技术,可一直不能接受它,其中最大的原因就是过于“复杂” ...

  8. Golang cpu的使用设置--GOMAXPROCS

    以下测试,使用的Go版本是1.8.3 不设置 如果没有调用runtime.GOMAXPROCS 去设置CPU,Golang默认使用所有的cpu核. 测试机器CPU有4个核,测试代码开启4个gorout ...

  9. Linux常用命令之定时任务

    定时任务的实现,可以让我们把很多重复的,有规律的事情交给机器做.我们就不用苦逼的烦躁做同一件事,这样也让我们做程序的有更多的乐趣和价值.用技术的手段解决常人花时间精力解决的问题.在Linux下实现定时 ...

  10. 【转】使用kettle工具遇到的问题汇总及解决方案

    使用kettle工具遇到的问题汇总及解决方案   转载文章版权声明:本文转载,原作者薄海 ,原文网址链接 http://blog.csdn.net/bohai0409/article/details/ ...