// 2015/07/04
// 访问存储过程
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient; namespace Ado.netstart_1
{
class Program
{
static void Main(string[] args)
{
// 特殊的字符串,数据库连接串
// 第一种
string connectionString = "server=.;database=BookSample;uid=LJK;pwd=123456;";
// 第二种
// windows身份验证
// 当使用windows身份验证的时候,windows用户就是运行程序的用户
// string connectionString = "server=.;integrated security=true;database=BookSample"; // 用来访问数据库的类
SqlConnection connection = new SqlConnection(connectionString); try
{
// 与数据库建立连接
connection.Open();
Console.WriteLine("已经建立连接"); // sql就是一个字符串
// 存储过程在数据库中有一个名字:execute 名字
// 现在的sql命令只需要存储过程的名字,不需要execute,也不需要参数 string sql = "output";
// SqlCommand 表示发送数据库执行SQL命令
// 现在sql已经不是标准的sql命令,而是一个存储过程
SqlCommand command = new SqlCommand(sql, connection);
// 通知数据库现在执行的是存储过程
// 如果没有设定那么默认为标准的存储过程
command.CommandType = CommandType.StoredProcedure; // 提供存储过程需要的参数
// 表示参数的类SqlParameter SqlParameter pEnd = new SqlParameter("@id", System.Data.SqlDbType.Int);
pEnd.Value = ; //现在存储过程有多了一个传出参数
SqlParameter result = new SqlParameter("@stuname",System.Data.SqlDbType.VarChar);
//默认情况下,Direction的值是传入参数
//现在是传出参数
result.Direction = ParameterDirection.Output; // 在执行存储过程的时候,将参数传递给存储过程
// 在存储过程之前,必须将需要的参数依次准备好
command.Parameters.Add(pEnd);
command.Parameters.Add(result); // 设置实际的参数值 // 将命令发送到数据库执行
// sql语句可分为:查询语句和非查询语句 // 默认工作在自动事务之下
// 如果工作在手动事务之下
// begin transaction
// rollback / commit // 在执行sql dml之前,启动事务
SqlTransaction trans = connection.BeginTransaction();//事务对象 // 设定命令所属的事务管理
command.Transaction = trans; //执行该存储过程对数据库中的行数没有影响
// int effectCount = command.ExecuteNonQuery();
// Console.WriteLine("{0} 行受影响", effectCount); //对于传出参数来说,必须在执行存储过程之后才能取得传出的值
//因为数据库中传出的值,可能是各种类型,所以,value 属性的类型是Object
String presult = (String)result.Value;
Console.WriteLine("pResult: {0}",presult); Console.Write("命令已经执行,事务还没有提交,你确定提交吗?Y/N");
string line = Console.ReadLine();
if (line.Substring(, ).ToUpper() == "Y")
{
trans.Commit();
Console.WriteLine("事务已经提交");
}
else
{
trans.Rollback();
Console.WriteLine("事务已经回滚");
}
}
catch (SqlException exception)
{
Console.WriteLine(exception.Message);
}
finally
{
// 或者断开与数据库的连接
connection.Dispose();
// connection.Close();
Console.WriteLine("已经断开连接");
}
Console.ReadKey();
}
}
}

c#访问存储过程的更多相关文章

  1. 关于JDBC访问存储过程的问题

    最近开发一个应用,需要调用一个入参为List的存储过程. 存储过程为: proc_test(p1 OUT Number, p2 IN Number, p3 IN TAB_CUSTOMER); 这个Li ...

  2. [译]DbContext API中使用SqlQuery和ExecuteSqlCommand获取存储过程的输入输出参数

    水平有限,欢迎指正.原文:http://blogs.msdn.com/b/diego/archive/2012/01/10/how-to-execute-stored-procedures-sqlqu ...

  3. LoadRunner调用Oracle存储过程

    为了测试这个存储过程,我遥了一圈去做这个事情,这里说一下我自己接受到任务和自己开始是怎么想的. 方法一: 一开始我想着可以使用C#直接去调用存储过程,然后用Loadrunner调用C#的dll去测试, ...

  4. J2EE之oracle、mysql存储过程调用

    最近几天在研究hibernate.JPA对存储过程的调用,主要是针对有返回结果集的存储过程的调用方法,个人感觉存储过程是个好东西,虽然说heibernate对数据访问封装的比较不错,再加上他的缓存机制 ...

  5. C#中使用Oracle存储过程返回结果集

    问题: 在MSSQLServer中定义的存储过程可以直接返回一个数据集,如: create procedure sp_getAllEmployees as SELECT * FROM [NORTHWN ...

  6. SQLHelper.cs的经典代码-存储过程

    using System; using System.Collections.Generic; using System.Text; using System.Collections; using S ...

  7. 一天一点MySQL复习——存储过程

    一.存储过程概念 使用SQL编写访问数据库的代码时,可用两种方法存储和执行这些代码,一种是在客户端存储代码,并创建向数据库服务器发送的SQL命令(或SQL语句),比如在C#.Java等客户端编程语言中 ...

  8. 快速拥有各种数据访问SqlHelper

    常加班食不按时,偶得清闲嘴溃疡. 美食一顿成泡汤,自此自认忙命人. 这就是此情此景的我,回来聊代码. 列举ADO.NET中的五个主要对象,并简单描述? 答:Connection连接对象,Command ...

  9. Oracle存储过程和自定义函数

    新博客文章链接,欢迎大家评论探讨 概述 存储过程和存储函数是指存储在数据库中供所有用户程序调用的子程序叫存储过程.存储函数. 异同点: 存储过程和存储函数的相同点:完成特定功能的程序. 存储过程和存储 ...

随机推荐

  1. iOS开发——工厂模式

    工厂模式很好用,为表诚意,我直接搞个实用的例子放这,解析一个订单的数据,并且这个订单里面可能不止一件商品的做法. 还是直接上代码,不懂的地方,再提出来. 1.在MyOrderDeals.h文件中 #i ...

  2. 全方位分析Objcetive-C Runtime

    本文详细整理了 Cocoa 的 Runtime 系统的知识,它使得 Objective-C 如虎添翼,具备了灵活的动态特性,使这门古老的语言焕发生机.主要内容如下: 引言 简介 与Runtime交互 ...

  3. 查看错误日志发现有两个警告(ignored in --skip-name-resolve mode)

    2016-08-02 17:30:26 17374 [Warning] 'user' entry '@losnau-223.com' ignored in --skip-name-resolve mo ...

  4. 概率dp初探

    论文链接:  http://wenku.baidu.com/link?url=vEcfxpqAvGRf6JL9IL2R6v8plBgPnaP3tKp5niOBmoajk0y4CcpwFzL4SkfGS ...

  5. CentOS标准目录结构

    原博:http://www.centoscn.com/CentOS/2014/0424/2861.html/ 最高层root --- 启动Linux时使用的一些核心文件.如操作系统内核.引导程序Gru ...

  6. IM 融云 之 列表及封装

    // // ChatListIMViewController.m // testRongCloudIM // // Created by WoodGao on 16/1/8. // Copyright ...

  7. Bagging和Boosting 概念及区别

    Bagging和Boosting都是将已有的分类或回归算法通过一定方式组合起来,形成一个性能更加强大的分类器,更准确的说这是一种分类算法的组装方法.即将弱分类器组装成强分类器的方法. 首先介绍Boot ...

  8. dubbo框架揭秘之服务引用

    ApplicationConfig config = new ApplicationConfig("hello-worldp"); RegistryConfig reg = new ...

  9. 字符集 ISO-8859-1(1)

    HTML 4.01 支持 ISO 8859-1 (Latin-1) 字符集. ISO-8859-1 的较低部分(从 1 到 127 之间的代码)是最初的 7 比特 ASCII. ISO-8859-1 ...

  10. endnote X7使用方法

    网页版的endnote不能添加新模版,只能用模版库里的那些,所以转而试试离线版客户端. 1.下载安装完以后(下载地址就不给了,网上有很多),在word里可以看到顶栏有插件,如果你同时也安装了在线版本, ...