QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

在.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:431717
用户头像

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

关注

评论

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

架构实战 - 毕业总结

咖啡

CSDN热榜、华为云博客都可用来练习Python scrapy 爬虫

梦想橡皮擦

12月日更

MySQL设置数据库为只读

Simon

MySQL

详细解读MySQL中的B+Tree 落地形式

秋水

MySQL优化 内容合集 签约计划第二季 B+tree

大数据基石之Hadoop的读写流程与2.X架构

编程江湖

大数据 hadoop

现代配置指南——YAML 比 JSON 高级在哪?

杨成功

json 大前端 架构师 yaml 签约计划第二季

初识 AspectJ ~

阿策小和尚

28天写作 Android 小菜鸟 12月日更

如何优雅地在Vue页面中引入图片

编程江湖

前端开发

lancet: 一个全面、高效、可复用的go语言工具函数库

柳叶刀

Go web go modules

面试官:说说你对react生命周期的理解

全栈潇晨

React

为什么一半的人员能够完成超过去年的事情?(13/28)

赵新龙

28天写作

react源码解析8.render阶段

buchila11

React

关于人脸识别的一个应用案例

为自己带盐

人脸识别 28天写作 百度智能云 12月日更

Linux系统学习攻略《Linux一学就会》:Linux系统启动原理及故障排除

侠盗安全

Linux linux运维 运维工程师 云计算架构师 linux电子书

电商系统微服务拆分及架构设计

stars

架构训练营 电商微服务分析

【LeetCode】统计「优美子数组」Java题解

Albert

算法 LeetCode 12月日更

4个优化方法,让你能了解join计算过程更透彻

华为云开发者联盟

数据 高性能 哈希表 join 标识对齐

元宇宙100讲-0x003

hackstoic

元宇宙

Vue3进阶(贰):Vue3 新特性

No Silver Bullet

Vue3 12月日更

react源码解析7.Fiber架构

buchila11

React

对话中移上研院,分享DevOps及运维观点

龙智—DevSecOps解决方案

DevOps 运维 中移上研院

冰河整理 深入理解高并发编程 | 内容精选合集

冰河

并发编程 多线程 高并发 内容合集 签约计划第二季

架构实战-毕业设计

咖啡

秒杀架构

架构营模块六作业

GTiger

架构实战营

Flutter 将整个App变为灰色(勿忘国殇 警钟长鸣)【Flutter专题21】

坚果

flutter 28天写作 12月日更

文件写入的6种方法,你知道几种

编程江湖

JAVA开发

专题:基于云的技术架构设计实践

hackstoic

DevOps 云原生 技术架构 内容合集 签约计划第二季

模块六课后作业-拆分电商系统为微服务

断水风春

架构实战营

vivo浏览器的快速开发平台实践-总览篇

vivo互联网技术

敏捷开发 浏览器 开发平台

给弟弟的信第11封|Java学习路线

大菠萝

28天写作

云图说|DRS数据对比——带您随时观测数据一致性

华为云开发者联盟

数据库 华为云 DRS 数据迁移

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