[IT168 技术文档]自定义函数和存储过程在.net里其实都是方法。只是方法上方标注[Microsoft.SqlServer.Server.SqlProcedure]
和[Microsoft.SqlServer.Server.SqlFunction]不同而已。自定义函数又分TVF函数和Scalar两种,最大区别在于TVF返回表后者返回Scalar(标量),这一篇我们做一下比较。
先看两段代码
存储过程:
using System; using System.Data; using System.Data.SqlClient; using System.Data.SqlTypes; using Microsoft.SqlServer.Server; public partial class StoredProcedures ...{ //这里是告诉sqlserver,这个方法要注册成存储过程 //我感觉[Attribute]这个东西翻译成标签更形像:) [Microsoft.SqlServer.Server.SqlProcedure] public static void TestStoredProcedure(string name, ref string outstr) ...{ // 在此处放置代码 outstr = "hello," + name; using (SqlConnection cn = new SqlConnection()) ...{ //使用上下文链接也就是当前数据库链接 cn.ConnectionString = "context connection=true"; using (SqlCommand cmd = cn.CreateCommand()) ...{ cmd.CommandText = "Select * from userinfo"; cn.Open(); //SqlContext.Pipe.Send这个方法输出结果集 //接受SqlDataReader,SqlDataRecord和string SqlContext.Pipe.Send(cmd.ExecuteReader()); //你也可以用下边这样 //SqlContext.Pipe.ExecuteAndSend(cmd); } } } };
执行存储过程
结果如下DECLARE @name nvarchar(4000) DECLARE @outstr nvarchar(4000) set @name='david fan' -- TODO: 在此处设置参数值。 EXECUTE [TestProject].[dbo].[TestStoredProcedure] @name ,@outstr OUTPUT print @outstr
输出参数返回值