用C#写存储过程(VS.NET 2005)

SQL2005中内置CLR, 因此可以用更高级的托管语言编写SP, Trigger,Function....等 
下面是我用C#编写SP的过程:

环境: Win 2003 + SQL Server 2005 CTP(今年2月版本) +VS.NET 2005 CTP(今年2月版本)  +FW 2.0.50110      beta2用C#写存储过程(VS.NET 2005) 

首先接上一篇链接的数据库,新建一个SQL Server Project 
用C#写存储过程(VS.NET 2005) 

接下来会提示要链接的数据库对话框: 
用C#写存储过程(VS.NET 2005) 
如果要链接的数据库不在列表中,可以Add New,链接完数据库后将得到如下工程

用C#写存储过程(VS.NET 2005) 
添加一个StoredProcedure Item,目前支持的Item有: 
用C#写存储过程(VS.NET 2005)

此时可以在数据库中添加一个表,如: table1,字段如下: 
用C#写存储过程(VS.NET 2005) 

给刚才添加的 StoredProcedure Item 中添加如下代码,其中包括两个存储过程,和一个函数

用C#写存储过程(VS.NET 2005)using System; 
用C#写存储过程(VS.NET 2005)using System.Data; 
用C#写存储过程(VS.NET 2005)using System.Data.Sql; 
用C#写存储过程(VS.NET 2005)using System.Data.SqlServer; 
用C#写存储过程(VS.NET 2005)using System.Data.SqlTypes; 
用C#写存储过程(VS.NET 2005) 
用C#写存储过程(VS.NET 2005) 
用C#写存储过程(VS.NET 2005)public partial  class StoredProcedures 
用C#写存储过程(VS.NET 2005)
用C#写存储过程(VS.NET 2005)    [SqlProcedure] 
用C#写存储过程(VS.NET 2005)    public static void Hello() 
用C#写存储过程(VS.NET 2005)    
用C#写存储过程(VS.NET 2005)        SqlContext.GetPipe().Send("hello ,uGoer!"); 
用C#写存储过程(VS.NET 2005)    }
 
用C#写存储过程(VS.NET 2005) 
用C#写存储过程(VS.NET 2005)    [SqlProcedure] 
用C#写存储过程(VS.NET 2005)    public static void InsertData(SqlString name) 
用C#写存储过程(VS.NET 2005)    
用C#写存储过程(VS.NET 2005)        SqlCommand InsertCurrencyCommand = SqlContext.GetCommand(); 
用C#写存储过程(VS.NET 2005)        InsertCurrencyCommand.CommandText = "INSERT INTO table1 (Name, addDate) VALUES ('"+name.Value+"', '" + DateTime.Now.ToString() + "')"; 
用C#写存储过程(VS.NET 2005)        InsertCurrencyCommand.ExecuteNonQuery(); 
用C#写存储过程(VS.NET 2005)    }
 
用C#写存储过程(VS.NET 2005) 
用C#写存储过程(VS.NET 2005)    [SqlFunction] 
用C#写存储过程(VS.NET 2005)    public static SqlString testFunction() 
用C#写存储过程(VS.NET 2005)    
用C#写存储过程(VS.NET 2005)        return "hello , cnBlogs.com"; 
用C#写存储过程(VS.NET 2005)    }
 
用C#写存储过程(VS.NET 2005)}
;

下一步就是编译部署用C#写的存储过程与函数,在目前的这个版本中VS.NET可以比较顺利的完成,步骤如下: 
选择build-->Deploy 工程名称 
部署完成以后再看看数据库吧,呵呵,刚才写的SP, Function都到里面去了 
用C#写存储过程(VS.NET 2005) 

最后测试一下调用C#写的存储过程,在SQL Server Project建立后会自动建立Test Scripts文件夹并且包含Test.sql文件,工具MSDN的说法可以在里面直接写T-SQL进行测试,好,下面我们就看看,在Test.sql中添加如下数据: 
用C#写存储过程(VS.NET 2005)EXEC Hello 
用C#写存储过程(VS.NET 2005)EXEC InsertData  ' ugoer ' 
用C#写存储过程(VS.NET 2005)EXEC InsertData  ' cnBlogs ' 
用C#写存储过程(VS.NET 2005) 
用C#写存储过程(VS.NET 2005)-- 看看我们添加的数据  
用C#写存储过程(VS.NET 2005)
SELECT  *  FROM table1

然后在Debug下 开始 Start 嘿嘿,等等吧,VS 2005太吃内存了,建议512M的机子跑。 
看看我们得到了什么: 
用C#写存储过程(VS.NET 2005) 
哈哈,一切正常看来以后写 存储过程方便了,运用托管语言封装T-SQL,可以利用托管语言对数据的处理能力,比如数据库过滤,判断,循环,等等等 


另:如果Debug出现这样的提示:use sp_configure 'clr enabled',请先打开 clr enabled,方法如下: 

用C#写存储过程(VS.NET 2005)EXEC sp_configure  ' show advanced options '1 
用C#写存储过程(VS.NET 2005)GO 
用C#写存储过程(VS.NET 2005)RECONFIGURE 
用C#写存储过程(VS.NET 2005)GO 
用C#写存储过程(VS.NET 2005) 
    EXEC sp_configure  ' clr enabled '1 
用C#写存储过程(VS.NET 2005)GO 
用C#写存储过程(VS.NET 2005)RECONFIGURE 
用C#写存储过程(VS.NET 2005)GO 
用C#写存储过程(VS.NET 2005) 
用C#写存储过程(VS.NET 2005)

要关闭clr enabled,可以使用

用C#写存储过程(VS.NET 2005)EXEC sp_configure  ' clr enabled '0 
用C#写存储过程(VS.NET 2005)GO 
用C#写存储过程(VS.NET 2005)RECONFIGURE 
用C#写存储过程(VS.NET 2005)GO 
用C#写存储过程(VS.NET 2005)

转载于:https://my.oschina.net/bv10000/blog/143057