文档章节

『C#基础』C#调用存储过程

灰大羊
 灰大羊
发布于 2016/07/05 10:12
字数 501
阅读 19
收藏 0

正文:

这里使用Ado.NET中的SqlCommond来执行存储过程。

需要注意的是,cmd的类型CommondType,因为我们要在这里指定为存储过程之后,我们才可以将cmd当作存储过程来调用。

存储过程的返回值也需要注意,如果有返回值的话,一定不要将类型写错了~

对于传入参数,有的人习惯一个一个加,有的人习惯用数组,我习惯用List,然后整体加到参数里面去。这几种方法都是可行的,差别应该是在对于内存的使用方面,是否需要对内存的控制加强到这个地步,还是要看所做的项目需要了。

 

参考代码:

using System;
using System.Collections.Generic;

using System.Data;
using System.Data.SqlClient;
using System.Data.Common;

namespace csdemo.basic.AdoDemo
{
    /// <summary>
    /// 存储过程操作DEMO
    /// </summary>
    public class DataProcedureDemo
    {
        /// <summary>
        /// 测试存储过程是否可以使用
        /// </summary>
        /// <param name="procedureName">存储过程名称</param>
        /// <param name="conn">数据连接</param>
        /// <returns>是否可以正常使用</returns>
        public bool ProcedureTest(string procedureName,SqlConnection conn)
        {
            List<SqlParameter> parm = new List<SqlParameter>();

            // 输入参数
            parm[0] = new SqlParameter();
            parm[0].ParameterName = "@Id";
            parm[0].SqlDbType = SqlDbType.UniqueIdentifier;
            parm[0].Value = new Guid(); 
            parm[0].Direction = ParameterDirection.Input;   // 定义参数IO类型

            parm[1] = new SqlParameter();
            parm[1].ParameterName = "@Name";
            parm[1].SqlDbType = SqlDbType.Char;
            parm[1].Size = 20;
            parm[1].Value = "峻之岭峰";
            parm[1].Direction = ParameterDirection.Input;

            parm[2] = new SqlParameter();
            parm[2].ParameterName = "@Birthday";
            parm[2].SqlDbType = SqlDbType.Date;
            parm[2].Value = DateTime.Now.ToString("MMdd");
            parm[2].Direction = ParameterDirection.Input;

            // 输出参数
            parm[3] = new SqlParameter();
            parm[3].ParameterName = "@Result";
            parm[3].SqlDbType = SqlDbType.Int;
            parm[3].Direction = ParameterDirection.Output;

            // 执行命令定义
            SqlCommand cmd = new SqlCommand();
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Connection = conn;
            cmd.CommandText = procedureName;
            cmd.Parameters.Add(parm);   // 添加参数到命令

            if (conn.State == ConnectionState.Closed)
            {
                conn.Open();
            }

            bool result = false;
            try
            {
                cmd.ExecuteNonQuery();  // 执行存储过程调用
                result = true;

                // 这个方法里面没有用到,用于填充DataSet
                DataSet ds = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter();
                da.SelectCommand = cmd;
                da.Fill(ds);

            }
            catch
            {

            }
            finally
            {
                conn.Close();
            }

            return result;
        }
    }
}


 

参考网摘:

  1. C#调用存储过程的通用类
  2. C#调用存储过程两种方法
  3. C#调用存储过程简单完整例子
  4. C#存储过程调用

© 著作权归作者所有

灰大羊
粉丝 4
博文 96
码字总数 95147
作品 0
浦东
项目经理
私信 提问
【C#基础】值类型和引用类型

一、前言: 在备战软考的过程中,涉及到了原型模式,其中讲到了在浅复制的过程中,值类型和引用类型是有区别的。那么究竟什么是值类型,什么是引用类型呢? 在理解这两个概念之前,我们先谈一...

qq_26545305
2016/10/23
0
0
如何创建MySQL存储过程可以返回一个表类型的数据?在C#代码中如何调用这样的存储过程?

@飞晏 你好,想跟你请教个问题: 我最近在做实验室的项目,需要考虑些存储过程,想请教您一些MySQL存储过程的问题,麻烦您帮我看一下,万分感谢。 MySQL如何创建可以返回DataTable类型的存储...

hushaod
2013/12/04
777
2
mysql存储过程汉字乱码

我写了一个存储过程在syqlyog和mysql的Client里调用正常没有乱码,我的存储过程里含有汉字!但是我用C#代码执行MySqlDataAdapter(调用存储过程的语句, connection)返回的table里出现了汉字乱...

JohnLeeH
2012/02/15
1K
5
MySQL如何创建可以返回DataTable类型的存储过程?以及在C#中如何调用该存储过程来获得查询数据?

1、MySQL如何创建可以返回DataTable类型的存储过程? 具体:比如MySQL数据库中有mydbtest数据库,里面有一张表mytable,含有字段myID,myName,myNumber等字段,现在项目当中需要查询这个表的...

hushaod
2013/12/04
1K
1
C#里调用firebird 存储过程

我在C#里调用firebird 存储过程报错 现在贴出来求高手指点: ————————————————存储过程—————————————————————— ————————————————C#—...

蒙哥铁穆耳
2011/08/14
1K
13

没有更多内容

加载失败,请刷新页面

加载更多

rsync工具常用选项以及同步的两种方式

rsync -av /etc/passwd /tmp/1.txt #rsync的本机传输写法 rsync -av /tmp/1.txt 192.168.188.128:/tmp/2.txt #rsync的远程传输rsync格式rsync [OPTION] … SRC ......

林怡丰
今天
3
0
GatewayWorker 报错:stream_socket_server(): unable to connect to tcp://0.0.0.0:1238

GatewayWorker 报错:stream_socket_server(): unable to connect to tcp://0.0.0.0:1238 (Address already in use) 官方文档虽然有相同的问题,但是对我的问题没起作用…… 后面发现自己手贱...

wenzhizhong
昨天
3
0
REST接口

文章来源 https://zhuanlan.zhihu.com/p/28674721?group_id=886181549958119424 http://www.ruanyifeng.com/blog/2014/05/restful_api.html REST 对请求的约定 REST 用来规范应用如何在 HTTP......

Airship
昨天
6
0
Spring Cloud Config 统一配置中心

Spring Cloud Config 统一配置中心 一、统一配置中心 统一管理配置 通常,我们会使用配置文件来管理应用的配置。如一个 Spring Boot 的应用,可以将配置信息放在 application.yml 文件中,如...

非摩尔根
昨天
6
0
android ------ AAPT2 error: check logs for details解决方法

AAPT 是全称是 Android Asset Packaging Tool,它是构建 App,甚至是构建 Android 系统都必不可少的一个工具。它的作用是将所有资源文件压缩打包到Android APK 当中。我们在 Android SDK 目录...

切切歆语
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部