50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

在.NET 语言中封装存储过程

  • 2009-06-04
  • 本文字数:964 字

    阅读完需:约 3 分钟

在.NET 中针对已有的存储过程创建封装函数是相当困难的一件事。存储过程有特定的调用约定,这些约定在.NET Framework 中并不常用。它们包含以下内容:

  • Pass by Reference Parameters
  • Output Parameters
  • Optional Parameters with default values
  • All parameters are nullable
  • 用引用参数传递值
  • 输出参数
  • 带默认值的可选参数
  • 所有参数都是可空的

目前为止,完全映射并不可行。C#当前并不支持可选参数,只是针对所缺的参数使用占位符。VB 能够处理可选参数,但不能处理那些为空值的参数。例如,你不可以这样编写代码:

复制代码
<span>Function </span>FindCustomer(<span>Optional ByVal </span>firstName <span>As String </span>= <span>Nothing</span>, _
<span>Optional ByVal </span>lastName <span>As String </span>= <span>Nothing</span>, _
<span>Optional ByVal </span>zipCode <span>As Integer</span>? = <span>Nothing</span>) <span>As </span>DataTable

在调用带有多个可选参数的搜索式存储过程时,这是一个需要重点关注的问题。使用 C# 4 和 VB 10,最后的漏洞已经解决。C#现在支持可选值,两种语言在和可空结构打交道的时候,都可以使用可选类型。

特性

C#

映射

VB

映射

F#

映射

用引用参数传递值

1

ref type [param]

7

ByRef [param] As [type]

4

[param] : [type] byref

输出类型

1

out type [param]

7

ByRef [param] As [type]

4

[param] : [type] byref

可选字符串

4

string param = [default]

7

Optional [param] As String = [default]

N/A

4

Normal functions do not support optional parameters.

一般函数不支持可选参数

Method functions use: ?[param] : [type]

方法函数用:?[param] : [type]

其它的可选值

4

[type] param = [default]

7

Optional param As [type] = [default]

可空字符串

1

string param

7

param as String

4

[param] : string

[param] : string option

其它的空值参数

2

[type]? param

8

param As Nullable(of

[type])

4

[param] : Nullable<[type]>

[param] : [type] option

9

param as [type]?

可选的其它可空参数

4

[type]? param = [default]

10

Optional param As [type]? = [default]

4

?[param] : Nullable<[type]>

?[param] : [type] option

注意:F#不支持返回多个值,所以这种支持是有限的。不使用 ByRef 语法是不能更新多个任意的可变值。

查看英文原文: Wrapping Stored Procedures in .NET Languages

2009-06-04 10:432076
用户头像

发布了 87 篇内容, 共 24.8 次阅读, 收获喜欢 1 次。

关注

评论

发布
暂无评论
发现更多内容

《搞定1》读书笔记

超超不会飞

Apache Pulsar 2.6.1 版本正式发布:2.6.0 功能增强版,新增 OAuth2 支持

Apache Pulsar

消息队列 Apache Pulsar 消息系统 消息中间件

Java | 你知道快速搭建一个spring boot项目该怎么做吗?

简爱W

解决数据指数级增长挑战,英特尔如何又快又好提供领导力产品?

最新动态

Woman、man、camera、TV:如何做一个完整的深度学习应用

LeanCloud

学习 程序员 互联网 容器 LeanCloud

前端智能化的加速时刻:华为机器视觉的创新方程式

脑极体

性能相关,内存

Linuxer

性能

为什么中国出了这么多厉害的互联网公司,但没有自己设计过编程语言?

代码制造者

编程语言 低代码 企业信息化 零代码 编程开发

聊聊微服务

炜娓道来程序人生

架构 微服务 SOA

第11周总结+作业

林毋梦

Redis系列(一):Redis简介及环境安装

简爱W

Flink-键值分区状态-10

小知识点

scala 大数据 flink

区块链是一个有去无返的奇幻旅程

CECBC

区块链

面试官再问你Http请求过程,怼回去!

架构师修行之路

HTTP TCP/IP

使用 K8s 进行作业调度实战分享

后端进阶

学习 Kubernetes 容器 k8s 调度式分布

Android |《看完不忘系列》之dagger

哈利迪

android

炒股不要看K线图(分享最近学习投资的一点心得)

Nick

投资 理财

难以遏制的人因差错-Go的日志工具之痛

田晓亮

微服务 Go 语言

面经手册 · 第7篇《ArrayList也这么多知识?一个指定位置插入就把谢飞机面晕了!》

小傅哥

Java 数据结构 面试 小傅哥 ArrayList

月度工作汇报,为什么要全球直播?

赵新龙

TGO鲲鹏会 技术社区 开源社区

【Elasticsearch 技术分享】—— ES 查询检索数据的过程,是什么样子的?

程序员小航

Java elasticsearch 搜索 ES Lucene Elastic Search

有选择才会有困惑

escray

学习 面试

Redis系列(二):Redis的5种数据结构及其常用命令

简爱W

Luajit字节码分析之KSTR

whosemario

lua

迎接物联网时代,区块链大有可为

CECBC

云计算 大数据 区块链技术

科普小知识:区块链与分布式系统

CECBC

区块链 分布式

零代码简史

明道云

SaaS

Docker 镜像构建之 Dockerfile

哈喽沃德先生

Docker 容器 微服务

OPPO互联网DevSecOps实践

OPPO安全

DevOps 安全

甲方日常2

句子

工作 随笔杂谈 日常

CRM企业到底该不该做PaaS?

ToB行业头条

PaaS SaaS CRM

在.NET语言中封装存储过程_.NET_Jonathan Allen_InfoQ精选文章