作者:卞功鑫  ,转载请保留http://www.cnblogs.com/BinBinGo/p/6399847.html

            //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'
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); //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 obj = pout.Value; int p_result = Convert.ToInt32(obj); 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,执行的结果为:{0}",p_result);
}
catch(System.Data.SqlClient.SqlException exception)
{
Console.WriteLine(exception.Message);
} finally
{
//4 注销连接
connection.Dispose();
Console.WriteLine("成功断开数据计库MSPetShop4");
}
Console.ReadLine();

C#存储过程中传入传出参数的更多相关文章

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

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

  2. mapper.xml文件中传入list参数报错 ‘ ’附近有语法错误

    mapper.xml文件中传入list参数,使用foreach循环遍历值,但是在遍历的过程中出错了,具体代码如下所示 mapper.xml <select id="selectByCo ...

  3. .net 存储过程中的 output参数取值问题

    当存储过程中多个结果需要返回时经常需要用到output类型的参数,如果存储过程没有返回结果集只是输出output类型参数时使用如下代码: db.AddOutParameter(dbCmd, " ...

  4. Oracle plsql存储过程中out模式参数的用法

    在plsql中,存储过程中的out模式的参数可以用来返回数据,相当于函数的返回值.下面是一个小例子. 沿用上一篇的emp表结构和数据. 存储过程如下: create or replace proced ...

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

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

  6. element-ui(或者说Vue的子组件)绑定的方法中传入自定义参数

    比如el-upload中的 :on-success= fn,其实是给组件el-upload传递一个prop,这样写的话fn只能接受upload组件规定的参数,如果想自己传递父组件中的参数比如b,要写成 ...

  7. Mysql向存储过程中传递中文参数变成乱码的解决方案

    今天做程序需要用到一个存储过程,然后用php程序调用.  存储过程如下: delimiter $$ CREATE PROCEDURE disagree_upgrade_detail(a int,b t ...

  8. JS获取Url中传入的参数

    一:后台获取,前台调用 后台: object value= Request.QueryString[key]; 前台js: $(function(){ var value="<%=va ...

  9. MySQL存储过程中的3种循环,存储过程的基本语法,ORACLE与MYSQL的存储过程/函数的使用区别,退出存储过程方法

    在MySQL存储过程的语句中有三个标准的循环方式:WHILE循环,LOOP循环以及REPEAT循环.还有一种非标准的循环方式:GOTO,不过这种循环方式最好别用,很容易引起程序的混乱,在这里就不错具体 ...

随机推荐

  1. drone 0.8.8 集成gogs 进行ci/cd 处理

    drone 是一个不错的基于容器的ci/cd 工具,运行简单,同时插件也挺多,基本常见的轻量级的任务都是可以搞定的 环境准备 使用docker in docker docker-compose 文件 ...

  2. Python实例属性限制(__slots__)

    Python的动态绑定可以在程序运行的过程中对实例或class加上功能,但是如果我们想要限制实例的属性怎么办呢?更改内容请参考:Python学习指南 正常情况下,当我们定义了一个class,创建了一个 ...

  3. [转]Java对象的序列化和反序列化

    一.序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化. 把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存 ...

  4. python列表(list)遍历

    list = ['html', 'js', 'css', 'python'] 遍历列表方法1:for i in list: print("序号:%s 值:%s" % (list.i ...

  5. 到底什么是ES索引?

    你会发现,其实在ES里面,索引扮演的角色其实并不是存储,而是“索引”,看起来有点傻,但是其实我之前一直理解索引是存储,其实从命名上可以看出来,索引其实是分片的索引,分片的字典,记录了每个分片的位置,索 ...

  6. 查看Linux系统版本信息(转)

    一.查看Linux内核版本命令(两种方法): 1.cat /proc/version [root@S-CentOS home]# cat /proc/version Linux version 2.6 ...

  7. 反转链表 II

    反转从位置 m 到 n 的链表.请使用一趟扫描完成反转. 说明:1 ≤ m ≤ n ≤ 链表长度. 示例: 输入: 1->2->3->4->5->NULL, m = 2, ...

  8. Linux paste命令详解

    Linux paste命令 Linux paste命令用于合并文件的列.paste指令会把每个文件以列对列的方式,一列列地加以合并 将每个指定文件里的每一行整合到对应一行里写到标准输出,之间用制表符分 ...

  9. RedHat6.5安装单机flume1.6

    版本号: RedHat6.5   JDK1.8   apache-flume-1.6.0 1.apache-flume-1.6.0-bin.tar.gz 下载 官网下载地址:http://archiv ...

  10. CentOS6.4 添加php-fpm系统服务

    简介: php-fpm安装完成后默认不会注册为系统服务,所以需要手工添加系统服务脚本.在/etc/init.d目录下新建php-fpm文件,并更改权限其即可. 1.检测/usr/local/php/v ...