// 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. JS利用短路原理简写if语句

    看GoogleDoodle-Dance的源代码,学习到一个小知识——简写if语句. 几乎所有语言中||和&&都遵循“短路”原理,如&&中第一个表达式为假就不会去处理第二 ...

  2. iOS开发实现Label中多颜色多字体

     UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(8, 100, 300, 30)]; label.textColor = wor ...

  3. 在 WindowMobile 上的模拟LED 显示屏插件(转)

    源:在 WindowMobile 上的模拟LED 显示屏插件 我在给一个对话框上的控件查找翻看合适的图标时,无形中看到了一个LED显示屏的图标,这里所说的LED显示屏是指由很多LED灯密集排列组成的点 ...

  4. sql2000数据库误删除后自行恢复二次覆盖成功恢复

    sql2000数据库误删除后自行恢复二次覆盖成功恢复 [数据恢复故障描述] 今天接到一个客户电话,他的速达sql2000数据库,数据库误删除了,关键之前还没有备份过.他就想自己尝试恢复,使用网上下载的 ...

  5. c++初学(电梯实验加强版)

    Elevator.h class Elevator{public:    Elevator();    ~Elevator();    void getNowNum();        void Se ...

  6. Python3基础 filter与lambda表达式配合 筛选出1-100之间的奇数

    镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...

  7. Sublime Text3 使用手册

    1.标签页切换:ctrl+tab 2.Sublime Text3的配色方案(Preferences——配色方案)我选白色方案是:Eiffel;深色方案我选:Monokai 3.左边资源栏:先ctrl+ ...

  8. Unicode范围

    unicode编码范围: 汉字:[0x4e00,0x9fa5](或十进制[19968,40869]) 数字:[0x30,0x39](或十进制[48, 57]) 小写字母:[0x61,0x7a](或十进 ...

  9. KMP算法深入解析

    本文主要介绍KMP算法原理.KMP算法是一种高效的字符串匹配算法,通过对源串进行一次遍历即可完成对字符串的匹配. 1.基础知识的铺垫 字符串T的前k(0 =< k <=tlen)个连续的字 ...

  10. Assembly

    Principles of Computer Organization and Assembly Language Using the JavaTM Virtual Machine http://it ...