zoukankan      html  css  js  c++  java
  • 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();
            }
        }
    }
    View Code
  • 相关阅读:
    课堂笔记-------字符串类型string------练习
    网络设计中需要考虑的时延latency差异
    ceph calamari 监控系统安装 on ubuntu 14.04
    Ceph性能优化总结(v0.94)
    创意点子
    “CEPH浅析”系列之八——小结
    “Ceph浅析”系列之七——关于Ceph的若干想法
    “CEPH浅析”系列之六——CEPH与OPENSTACK
    “Ceph浅析”系列之五——Ceph的工作原理及流程
    Ceph浅析”系列之四——Ceph的结构
  • 原文地址:https://www.cnblogs.com/IamJiangXiaoKun/p/4620932.html
Copyright © 2011-2022 走看看