写点什么

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

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

关注

评论

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

大厂面试题集合之阿里一面[1]

派大星

Java 面试题

HarmonyOS应用事件打点开发指导

HarmonyOS开发者

HarmonyOS

高级数据库数据安全保障方法就是使用靠谱的工具!

行云管家

数据库 数字化 数据安全 数据安全运维

软件测试/测试开发|测试用例设计方法——边界值

霍格沃兹测试开发学社

营销科学AIA:汽车企业坚定长期主义的秘密武器

新消费日报

AI原生企业级Agent构建平台具备哪些特性?一篇文章看明白

王吉伟频道

生成式AI AI Agent AI智能体 数据飞轮 Agent构建

拆解低代码平台核心功能:八大关键点解析

天津汇柏科技有限公司

低代码

打造高效用户旅程:埋点分析系统的实操指南

ClkLog

开源 埋点分析系统

电池最大充电限制软件分享:AlDente Pro 激活中文最新版

胖墩儿不胖y

Mac软件 电池管理工具 电池充电管理

强烈推荐的前端学习资源,先收藏!

伤感汤姆布利柏

前端 工具

软件测试/测试开发|一文详解Linux grep命令

霍格沃兹测试开发学社

聚焦“工程师文化”,TDengine 创始人陶建辉在 TOP100Summit 上发表演讲

TDengine

tdengine 时序数据库

Ubuntu系统如何启动、停止或重启服务。

百度搜索:蓝易云

云计算 Linux ubuntu 运维 云服务器

微软官方发布的C#开源、免费、实用的Windows工具箱

EquatorCoco

C# 微软 编程语言 windows

AI Native工程化:百度App AI互动技术实践

百度Geek说

人工智能 大数据 12 月 PK 榜 Prompt

人工智能可以战胜人类智慧大脑么?

天津汇柏科技有限公司

人工智能

Java第一个程序——Hello,World!

小魏写代码

软件测试/测试开发|Python selenium CSS定位方法详解

霍格沃兹测试开发学社

深度解析英特尔,以全方位产品技术创新,助大语言模型应用落地

E科讯

一键在线获取APP公钥、包名、签名及备案信息方法介绍

Geek_66e2f3

数据库编程大赛:一条SQL计算扑克牌24点

NineData

数据库 sql SQL开发 NineData 编程大赛

一套分布式IM即时通讯系统的技术选型和架构设计

JackJiang

网络编程 即时通讯 IM

深度解析阿里巴巴API,关键字搜索和商品详情接口

tbapi

阿里巴巴API接口 阿里巴巴商品列表数据接口 阿里巴巴商品详情接口 阿里巴巴数据采集 阿里巴巴商品数据API

Luminar Neo 中文破解版:mac电脑强大的ai修图软件

mac大玩家j

Mac软件 照片修改工具 照片管理软件

同事突然问我:异步网络请求编码的方法

华为云开发者联盟

开发 华为云 华为云开发者联盟

终端闲思录(2)- 终端的源流嬗变

蓬蒿

终端 终端仿真

2023年度技术卓越奖名单揭晓,天翼云TeleDB数据库荣誉上榜

编程猫

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