写点什么

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

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

关注

评论

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

个推TechDay直播预告 | 6月22日,开启大数据降本提效的破局之道!

个推

大数据 分布式计算 分布式存储 标签

技能速成!教你10分钟内在电脑上配置运行Hive Metastore和Presto

Alluxio

presto 技能 Alluxio hive metastore 初学者

多年亿级流量下的高并发经验总结,我毫无保留的写在了这本书中

冰河

并发编程 多线程 高并发 异步编程 6月月更

转转统一权限系统的设计与实现(前端实现篇)

转转技术团队

前端开发 umijs 权限设计

ABAP-调用WebService服务

桥下本有油菜花

abap

JDK8 HashMap如何实现?

源字节1号

软件开发

java就业培训 | 面试官如何判断应聘者能力的,这一篇就够了

@零度

JAVA开发

java程序员培训 | 10年后程序员的薪资会怎么样

@零度

JAVA开发

基于深度学习的水冷工作站加速遥感测绘应用研发

GPU算力

如何使用物联网低代码平台进行数据分析?

AIRIOT

物联网 低代码开发

2023年广州美博会-2023年春季广州美博会

Geek_0b38bb

美博会 2023年广州美博会 春季广州美博会 3月份广州美博会

华为云携手鸿蒙,培养创新型开发者

华为云开发者联盟

云计算 鸿蒙 华为云

Neat Syntax Design of an ETL Language (Part 1)

Bright

数据开发 ETL 大数据开发 EasySQL

Javascript API自动代码生成需求征集

老豆还编程

JavaScript OpenAPI axios

探索质量外延 - 质量安全故事

QualityFocus

质量管理 软件质量与安全

Mysql数据库查询好慢,除了索引,还能因为什么?

C++后台开发

MySQL 数据库 中间件 后端开发 C++后台开发

「势说新语」SBOM在企业软件供应链管理中的重要性—安全漏洞篇

安势信息

开源 漏洞 开源软件供应链 软件物料清单 SBOM

时序数据是如何被压缩的?具体有哪些可选择的压缩算法?

TDengine

数据库 tdengine 时序数据库

uni-app进阶之Weex/nvue【day6】

恒山其若陋兮

6月月更

云堡垒机单机部署的优缺点讲解-行云管家

行云管家

网络安全 堡垒机 云堡垒机 堡垒机部署

科创人·酷渲科技创始人华少:用双赢思维做产品、连生态,实现规模化发展

科创人

web前端培训如何提高React界面性能

@零度

前端开发 React

Vue-12-条件渲染(可重复元素)

Python研究所

6月月更

帮助中心应该怎样设计?

小炮

特定MPC问题包含哪些常见技术,有什么作用,什么场景需要用到?

Jessica@数牍

隐私计算 安全多方计算 特定mpc问题

倒计时2日!基于 Apache DolphinScheduler&TiDB 的交叉开发实践,从编写到调度让你大幅提升效率

白鲸开源

Apache 大数据 开源 Apache DolphinScheduler

Flink框架中的时间语义和Watermark(数据标记)

百思不得小赵

大数据 flink 6月月更

大数据系统包含哪些组件?需要过等保吗?

行云管家

大数据 数据 过等保

为什么不建议你用 MongoDB 这类产品替代时序数据库?

TDengine

数据库 tdengine 时序数据库

人才一站式服务平台开发,高层次人才管理系统

a13823115807

阿里云CIPU下笔惊雷,方寸间书写中国算力故事

脑极体

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