Csharp/C#教程:SQL Server 2005中.NET存储过程的默认参数值/可选参数分享


SQL Server 2005中.NET存储过程的默认参数值/可选参数

SQL Server在.NET 2.0框架上用C#编写的存储过程,它具有SqlInt32参数。 我试图使参数可选。 这是一个最小的测试用例,只打印传递给它的整数:

[Microsoft.SqlServer.Server.SqlProcedure] public static void TestProc( SqlInt32 TestInt ) { SqlPipe pipe; pipe = SqlContext.Pipe; if (TestInt.IsNull) { pipe.Send("NULL value passed"); } else { pipe.Send(TestInt.ToString()); } } 

这些命令按预期执行,并分别打印“1”和“NULL值传递”:

 exec dbo.TestProc @TestInt = 1 exec dbo.TestProc @TestInt = null 

但是,我的目标是为@TestInt分配一个NULL的默认值,这将允许我执行这个命令:

 exec dbo.TestProc 

我找不到一种方法来为.NET代码中的参数提供默认值。 从我可以通过Googling找到的,.NET 4.0将支持可选参数,因此可能是.NET 2.0没有。 并且(天真地)更改这样的参数声明会给出错误“不允许使用默认参数说明符”:

 SqlInt32 TestInt = SqlInt32.Null 

我还尝试通过添加以下代码重载该方法:

 public static void TestProc() { SqlInt32 intNull; intNull = SqlInt32.Null; TestProc(intNull); } 

这样编译干净,但无法部署:VS显示错误“不支持重载的方法,属性或字段”。 所以在这一点上我被困住了。

实际用例当然更复杂:它是一个TSQL日志记录模块,它调用存储过程来处理日志消息。 处理过程在运行时动态识别,调用代码不知道它是否正在调用TSQL或.NET proc。 这需要所有过程支持相同的参数,并且有几个是可选的。 调用代码已经在生产中,所以我试图避免更改它以在每次调用时传递每个参数。 在TSQL过程中,这不是问题,因为可选参数很容易,但显然不在.NET中。

正如您所指出的,这是因为C#2.0不支持可选参数。

一种解决方法可能是将.NET存储过程包装在接受默认参数的常规T-SQL存储过程中。

例如:

 CREATE PROCEDURE TestProcWrapper ( @TestIntWrapperParam int = null ) AS EXEC TestProc @TestInt = @TestIntWrapperParam 

这有点难看,但可能会让你暂时离开。

上述就是C#学习教程:SQL Server 2005中.NET存储过程的默认参数值/可选参数分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/997252.html

(0)
上一篇 2021年12月26日
下一篇 2021年12月26日

精彩推荐