c#访问存储过程

// 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 = 2;

                //现在存储过程有多了一个传出参数
                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(0, 1).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();
        }
    }
}

时间: 2024-08-25 03:12:29

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

oracle存储过程--在应用程序中访问存储过程程序完整举例

认识存储过程和函数 存储过程和函数也是一种PL/SQL块,是存入数据库的PL/SQL块.但存储过程和函数不同于已经介绍过的PL/SQL程序,我们通常把PL/SQL程序称为无名块,而存储过程和函数是以命名的方式存储于数据库中的.和PL/SQL程序相比,存储过程有很多优点,具体归纳如下: * 存储过程和函数以命名的数据库对象形式存储于数据库当中.存储在数据库中的优点是很明显的,因为代码不保存在本地,用户可以在任何客户机上登录到数据库,并调用或修改代码. * 存储过程和函数可由数据库提供安全保证,要想

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

最近开发一个应用,需要调用一个入参为List的存储过程. 存储过程为: proc_test(p1 OUT Number, p2 IN Number, p3 IN TAB_CUSTOMER); 这个List入参是一个在oracle中自定义的类型的表,如下: CREATE OR REPLACE TYPE TAB_CUSTOMER AS TABLE OF TYP_CUSTOMER; CREATE OR REPLACE TYPE TYP_CUSTOMER AS OBJECT(  ID          

SQL Server存储过程的初步认知

什么是存储过程? 存储过程就是作为可执行对象存放在数据库中的一个或多个SQL命令.实际上存储过程就是能完成一定操作的一组SQL语句. 为什么要用存储过程? 1.  存储过程只在创造时候编译,以后每次执行存储过程都不需要再重新的编译,而一般的SQL语句每执行一次就需要编译一次,所以使用存储过程可提高数据库执行速度. 2.  当对数据库进行复杂操作时,可将此复杂操作用存储过程封装起来与数据库提供的事物处理结合在一起. 3.  存储过程可以重复的使用,降低开发人员的工作量,提高工作效率. 4.  安全

快速拥有各种数据访问SqlHelper

常加班食不按时,偶得清闲嘴溃疡. 美食一顿成泡汤,自此自认忙命人. 这就是此情此景的我,回来聊代码. 列举ADO.NET中的五个主要对象,并简单描述? 答:Connection连接对象,Command执行命令和存储过程,DataReader向前只读的数据流,DataAdapter适配器,支持增删查询,DataSet数据级对象,相当与内存里的一张或多张表. 还记得吗?它就是C#面试题精选100题之一.回头再看,是蛮重要.只要简单修改这个几个对象,分分钟钟拥有不同数据库访问Helper类.下面我们已

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

问题: 在MSSQLServer中定义的存储过程可以直接返回一个数据集,如: create procedure sp_getAllEmployees as SELECT * FROM [NORTHWND].[dbo].[Employees] 在Oracle数据库中这样定义是错误的,怎么解决? 办法: Oracle中可以使用游标(Cursor)对数据集进行操作,但在存储过程输出参数中直接使用Cursor错误,此时的Cursor应该是一个定义游标的关键字并非类型,所以先要定义一个包,在包中声明全局的

sql事务和存储过程

一.sql事务 1.什么是事务:事务是一个不可分割的工作逻辑单元,在数据库系统上执行并发操作时事务是做为最小的控制单元来使用的.他包含的所有数据库操作命令作为一个整体一起向系提交或撤消,这一组数据库操作命令要么都执行,要么都不执行. 2.事务的语句开始事物:BEGIN TRANSACTION提交事物:COMMIT TRANSACTION回滚事务:ROLLBACK TRANSACTION 3.事务的4个特性  ①原子性(Atomicity):事务中的所有元素作为一个整体提交或回滚,是不可折分的,事

数据库访问的

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Data;using System.Data.Common;using System.IO;using System.Text;using System.Data.SqlClient; namespace AdvWeiXin.API{ /// <summary> /// 通用数据库访问类,封装了对数据库的常见

简单通用数据库访问代码

创建连接,执行语句,执行存储过程等等 using System; using System.Collections.Generic; using System.Text; using System.Collections; using System.Data; using System.Data.SqlClient; using System.Configuration; namespace EXP_Data { public class C_SQL { #region 通用方法 // 数据连接

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

一.存储过程概念 使用SQL编写访问数据库的代码时,可用两种方法存储和执行这些代码,一种是在客户端存储代码,并创建向数据库服务器发送的SQL命令(或SQL语句),比如在C#.Java等客户端编程语言中嵌入访问数据库的SQL语句:另一种是将SQL语句存储在数据库服务器端(实际是存储在具体的数据库中,作为数据库的一个对象),然后由应用程序调用执行这些SQL语句. 这些存储在数据库服务器端供客户端调用执行的SQL语句就是存储过程,客户端应用程序可以直接调用并执行存储过程,存储过程的执行结果可返回给客户