在.NET中针对已有的存储过程创建封装函数是相当困难的一件事。存储过程有特定的调用约定,这些约定在.NET Framework中并不常用。它们包含以下内容:

Pass by Reference Parameters
Output Parameters
Optional Parameters with default values
All parameters are nullable
用引用参数传递值
输出参数
带默认值的可选参数
所有参数都是可空的
目前为止,完全映射并不可行。C#当前并不支持可选参数,只是针对所缺的参数使用占位符。VB能够处理可选参数,但不能处理那些为空值的参数。例如,你不可以这样编写代码:
Function FindCustomer(Optional ByVal firstName As String = Nothing, _  Optional ByVal lastName As String = Nothing, _ Optional ByVal zipCode As Integer? = Nothing) As 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语法是不能更新多个任意的可变值。
微软已经建议禁用memcpy()函数,该函数很可能会在今年底出现在微软的SDL禁用列表中。memcpy()加入到strcpy, strncpy, strcat, strncat等常用函数的队伍中,都是由于可通过缓存溢出进行安全攻击而被禁用。
一些微软的安全更新由于memcpy()的原因而发布:MS03-030 (DirectX)、MS03-043 (Messenger Service)、MS03-044 (Help and Support)、MS05-039 (PnP)、MS04-011 (PCT)、MS05-030 (Outlook Express)、CVE-2007-3999 (MIT Kerberos v5)、CVE-2007-4000 (MIT Kerberos v5)及其他。
微软禁用的函数有memcpy()、CopyMemory()和RtlCopyMemory()。要禁用这些函数,编程人员可添加以下#pragma代码行到头文件,编译器每一次遇到该行代码的时候都会发出警告。
#pragma deprecated (memcpy, RtlCopyMemory, CopyMemory)
或者针对C++的选项使用下列代码:
#define _CRT_SECURE_WARNINGS_MEMORY
对于GCC使用以下代码:
#pragma GCC poison memcpy RtlCopyMemory CopyMemory推荐使用的代替函数是memcpy_s(),它在VC++ 2008的签名如下:errno_t __cdecl

memcpy_s(
_Out_opt_bytecap_post_bytecount_(_DstSize, _MaxCount)

void * _Dst,
_In_ rsize_t _DstSize,

_In_opt_bytecount_(_MaxCount) const void * _Src,

_In_ rsize_t _MaxCount
);
在某人可能设定比实际分配更大的代码空间的时候,memcpy_s()没有memcpy()那样的安全弱点,所以不容易出错。
完整的SDL列表包含许多禁用的函数调用和建议替代的函数。部分摘录如下:
Description
描述 Banned function
禁用函数 Recommended function
推荐函数 
String copy
字符串复制函数 strcpy, wcscpy, _tcscpy, _mbscpy, StrCpy, StrCpyA, StrCpyW, lstrcpy, lstrcpyA, lstrcpyW, strcpyA, strcpyW, _tccpy, _mbccpy strcpy_s 
String concatenation
字符串连接函数 strcat, wcscat, _tcscat, _mbscat, StrCat, StrCatA, StrCatW, lstrcat, lstrcatA, lstrcatW, StrCatBuffW, StrCatBuff, StrCatBuffA, StrCatChainW, strcatA, strcatW, _tccat, _mbccat strcat_s 
Sprintf
Sprintf函数 wnsprintf, wnsprintfA, wnsprintfW, sprintfW, sprintfA, wsprintf, wsprintfW, wsprintfA,
sprintf, swprintf, _stprintf sprintf_s 
Tokenizing函数 strtok, _tcstok, wcstok, _mbstok strtok_s 
Scanf scanf, wscanf, _tscanf, sscanf, swscanf, _stscanf sscanf_s 
Numeric conversions
数值转换函数
 _itoa, _itow, _i64toa, _i64tow, _ui64toa, _ui64tot, _ui64tow, _ultoa, _ultot, _ultow _itoa_s, _itow_s 
Gets gets, _getts, _gettws gets_s 

SDL提供了头文件(banned.h),编程人员一旦使用所有被禁用函数就会得到相关的警告。另一种可选的方式是编程人员可以在VS2005或后续版本中使用/W4-C4996编译选项。
-------------------------------------------------------------------------------------
[size=4][b]十年校庆 联合千家企业 资助笔记本电脑入学
带薪培训 实战工作经验 签定就业保障协议书[/b][/size]
[img]http://www.itniwo.com/picture/sy.jpg[/img]

[size=4][b]中科万维职业IT教育:[/b][/size][size=4][b][url]http://www.Itniwo.com[/url][/b][/size]