发布在即!企业 AIGC 应用程度测评,3 步定制专属评估报告。抢首批测评权益>>> 了解详情
写点什么

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

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

关注

评论

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

架构设计能力提升

arctec

【设计模式】组合模式

Andy阿辉

C# 后端 设计模式 8月日更

oeasy教您玩转vim - 10 - # 插入新行

o

Vue进阶(十七):proxyTable 配置

No Silver Bullet

Vue 8月日更

kubernetes/k8s CRI分析-kubelet创建pod分析

良凯尔

Kubernetes 源码分析 Kubernetes Plugin #Kubernetes# cri-o

奥运背后的5G赛场,竟然也这么激烈?

白洞计划

架构实战营模块 4 作业指导

华仔

架构实战营

毕业设计电商秒杀系统

梦寐凯旋

#架构实战营

一款非常简单的基于WebRTC的视频预览播放器(具有贴图、视频特效)

liuzhen007

8月日更

07-数据库存储架构

Lane

08-消息队列备选架构选择和细化

Lane

在线身份证号码提取生日工具

入门小站

工具

架构实战营 - 模块四作业

Julian Chu

架构实战营

电商秒杀系统

Presley

手撸二叉树之二叉树的最大深度

HelloWorld杰少

数据结构与算法 8月日更

Vue进阶(十九): ES6 箭头函数

No Silver Bullet

Vue 箭头函数 8月日更

趁着课余时间学点Python(六)终止循环,阻断循环

ベ布小禅

8月日更

iOS开发:实现点击常用控件弹出地区选择框(万能方法)

三掌柜

8月日更 8月

毕业设计

Chris Cheng

Go并发之同步异步、异步回调

Regan Yue

高并发 协程 Go 语言 8月日更

业务架构图的定位:表达业务层级和关系

arctec

每个人都可以说不

escray

学习 极客时间 朱赟的技术管理课 8月日更

Flutter Android 端 Activity/Fragment 流程源码分析

工匠若水

flutter android 0 基础学习 Flutter 8月日更

千万级学生管理系统考试试卷存储方案

面向对象的猫

模块四作业

Geek_35a345

【LeetCode】用两个栈实现队列Java题解

Albert

算法 LeetCode 8月日更

Linux之crontab命令

入门小站

Linux

毕业总结

Chris Cheng

架构训练营

【Flutter 专题】74 图解基本 DropdownButton 下拉选项框按钮

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 8月日更

期末设计

Geek_9cf7b5

Python代码阅读(第6篇):根据给定的函数对列表中的元素进行分组

Felix

Python 编程 Code Programing 阅读代码

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