写点什么

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

2009 年 6 月 04 日

在.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 年 6 月 04 日 10:431227
用户头像

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

关注

评论

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

K近邻算法:机器学习萌新必学算法

华为云开发者社区

学习 算法

2020年了,终于有大佬把Java程序员必学知识点总结整理出来了!

Java架构之路

Java 程序员 架构 面试 编程语言

十个写代码的小技巧,保你在面试过程中脱颖而出

Java架构师迁哥

技术实践丨PostgreSQL插件之pg_dirtyread "闪回查询"

华为云开发者社区

数据库 后端

人少钱少需求多的新项目该怎么带?看到这篇我心里有底了!

华为云开发者社区

技术 运维 后端

数字货币交易所系统开发技术

薇電13242772558

区块链 数字货币

阿里P8大牛2020年总结整理的心血之作:17W字操作系统、网络协议教程、面试真题(附导图+笔记)

Java架构之路

Java 程序员 架构 面试 编程语言

产品资讯 | mPaaS 适配 targetSdkVersion 29

蚂蚁集团移动开发平台 mPaaS

移动开发 mPaaS

首个通用安全技术行业标准发布适用于区块链技术架构 但监管仍待完善

CECBC区块链专委会

金融 安全技术

一周信创舆情观察(10.19~10.25)

统小信uos

花费6个月的时间,五面阿里java岗,最后竟然差点倒在最后HR面?

Java架构追梦

Java 学习 编程 架构 面试

【JSRC小课堂】Web安全专题(四)SRC漏洞挖掘技术之命令执行漏洞

京东智联云开发者

WEB安全

区块链将与人工智能、物联网、云计算技术形成互补

CECBC区块链专委会

人工智能 物联网

作为打工人,如何正确的选择自动化测试工具(完全指南)

软测小生

软件测试 测试 软件自动化测试 测试工具 测试开发

年末成功上岸腾讯T3-2,全凭这份业内跪求的Java核心笔记

小Q

Java 学习 架构 面试 程序猿

LR软件开发平台:快速建立企业协同办公解决方案

力软.net/java开发平台

2020中国系统架构师大会活动回顾:ZEGO实时音视频服务架构实践

ZEGO即构

架构设计 RTC

Java-技术专题-JDK8新特性之Stream流

李浩宇/Alex

Appium常用操作之「元素定位、swipe 滑屏操作」

清菡

“绝影”机器狗如何利用ModelArts强化学习算法更改导航轨迹

华为云开发者社区

人工智能 机器狗 导航

训练营第二周总结

大脸猫

极客大学架构师训练营

接口工具使用对比(apipost、jmeter、postman、swagger等)

测试人生路

Jmeter Postman 接口测试

阿里技术四面+交叉面+HR面成功拿到offer,谁说双非本科进不了大厂?

Java架构之路

Java 程序员 架构 面试 编程语言

Java-技术专题-Stream流详解

李浩宇/Alex

架构师训练营 -week06-总结

大刘

极客大学架构师训练营

架构师训练营 - 第 6 周课后作业(1 期)

Pudding

苏州高铁新城打造区块链发展聚集地

CECBC区块链专委会

区块链 智能合约 金融

架构训练营 - 第6周课后作业 - 学习总结

Pudding

叼!阿里Mysql三位封神专家总结800页性能优化的千金良方

996小迁

Java MySQL 编程 架构 面试

【Java面试官】我管你什么P7、P8?答不出这十道题你就是渣!

Java架构师迁哥

训练营第二周作业

大脸猫

极客大学架构师训练营

InfoQ 极客传媒开发者生态共创计划线上发布会

InfoQ 极客传媒开发者生态共创计划线上发布会

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