国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > SQL Server > 正文

探討SQL Server 2005.NET CLR編程

2024-08-31 00:49:43
字體:
來源:轉載
供稿:網友

本文將解釋如何在sql server 2005中以盡可能最簡單的方法創建基于.net的clr子例程。本文主要針對在服務器端使用sql server 2005的.net開發者。

一、創建sql server 2005數據庫

這一節主要討論創建一個將用于本文中的數據庫和表格。詳見下列步驟:

· 執行"start->programs->microsoft sql server 2005->sql server management studio",并使用必要的證書連接到你的sql server 2005實例。

· 一旦建立連接,使用"object explorer"打開sql server 2005實例,然后右擊"databases"并選擇"new database"(圖1)。

圖1

然后,出現一個"new database"對話框。輸入數據庫名"sample"并點擊"ok"以便在同一個實例內創建新的數據庫。

· 一旦創建該數據庫,你一定能夠在"object explorer"中看到相同的結果。

· 使用"object explorer"打開"sample"數據庫,右擊"tables"并選擇"new table"(圖2)。

圖2

· 創建如下圖3所示的表格結構,并用"emp"保存表格。

圖3

· 一旦你創建了表格"emp",打開它(圖4)并使用下列數據進行填充(圖5)。

圖4

圖5

二、創建sql server 2005數據庫.net clr存儲過程

一旦你創建完數據庫和表格,接下來讓我們使用下列步驟在sql server 2005數據庫中創建一個.net clr存儲過程:

· 轉到"start -> programs -> microsoft visual studio 2005 -> microsoft visual studio 2005"。

· 在"new project"對話框內,從"visual basic"樹的"project type"下選擇"database"并選擇"sql server project"作為模板,輸入名字"sampleallinone"。至此,該對話框應該看起來如下圖6所示。

圖6

· 一旦你點擊"ok",將出現一個"new database reference"對話框。輸入你自己的實例名,并選擇數據庫"sample"(在上一節創建的),并且測試連接(圖7)。

圖7

· 一旦測試成功,點擊"ok"創建工程。

· 然后系統出現一個對話框,它詢問你是否啟動clr調試功能。請點擊"yes"(圖8)。

圖8

· 使用"solution explorer",右擊"sampleallinone"工程,并點擊"add->stored procedure"(以創建一個新的存儲過程)(圖9)。

圖9

· 之后,出現"add new item"對話框。在該對話框內,選擇"stored procedure"作為模板并輸入名字"incsalaries",最后點擊"add"(圖10)。

圖10

三、.net clr存儲過程編碼

一旦創建"incsalaries.vb",以下列方法修改你的代碼,如下所示:

以下為引用的內容:
imports system
imports system.data
imports system.data.sqlclient
imports system.data.sqltypes
imports microsoft.sqlserver.server
partial public class storedprocedures
<microsoft.sqlserver.server.sqlprocedure()> _
public shared sub incsalaries(byval incval as sqldouble)
 '在此添加你的代碼
 using cn as new sqlconnection("context connection=true")
 dim cmd as new sqlcommand("update sample.dbo.emp set
 sal = sal + " & incval.tostring, cn)
 cmd.connection.open()
 cmd.executenonquery()
 end using
end sub
end class

上面是一個使用visual basic.net 2005編寫簡單的基于clr的存儲過程,你可以把它發布到sql server 2005中。該存儲過程名為"incsalaries",它只接收一個參數-"incval"。上面的存儲過程簡單地使用參數中提供的值來提高表格"emp"中每一位雇員的工資值。

四、.net clr存儲過程測試

為了測試上面的存儲過程,請遵循下列步驟:

· 使用"solution explorer"在"test scripts"中打開"test.sql"(圖11)。

圖11

· 轉到最后一行,并如下修改代碼:

--為運行你的工程,請編輯你的工程的test.sql文件。

--這個文件位于solution explorer的"test scripts"文件夾下

exec incsalaries 50

· 轉到"start->programs->microsoft sql server 2005->configuration tools->sql server surface area configuration"。

· 在窗口內,點擊"surface area configuration for features"(圖12)。

圖12

· 啟動clr集成,如下所示(圖13)。

圖13

· 按f5執行整個方案。如果它的執行中出現任何錯誤,一切都會被顯示于輸出窗口中。

· 如果存儲過程成功執行,你應該能夠看到所有的工資數增加了50。

五、sql server 2005數據庫中的.net clr用戶定義函數

現在,我們要在我們現有的方案上添加一個存儲函數。

· 使用"solution explorer",右擊"sampleallinone"工程并轉到"add->user-defined function"(以創建一個新的存儲函數)(圖14)。

圖14

· 之后,出現"add new item"對話框。在對話框內,選擇"user defined function"作為模板,輸入名字"getnetsalary",最后點擊"add"(圖15)。

圖15

一旦創建"getnetsalary.vb",接下來按下列方式修改你的代碼:

以下為引用的內容:
imports system
imports system.data
imports system.data.sqlclient
imports system.data.sqltypes
imports microsoft.sqlserver.server
partialpublic class userdefinedfunctions
<microsoft.sqlserver.server.sqlfunction
(dataaccess:=dataaccesskind.read)> _
public shared function getnetsalary(byval empno as sqlstring)
as sqldouble
 '在此添加你的代碼
 dim sal as double
 using cn as new sqlconnection("context connection=true")
 dim cmd as new sqlcommand("select sal from
 sample.dbo.emp where empno='" & empno.tostring & "'", cn)
 cmd.connection.open()
 sal = ctype(cmd.executescalar, double)
 cmd.dispose()
 end using
 dim hra as double = sal * 10 / 100
 dim ta as double = 200
 dim gross as double = sal + hra + ta
 dim epf as double = sal * 5 / 100
 dim net as double = gross - epf
 return net
end function
end class

然后,使用下列步驟測試上面的存儲過程:

· 使用"solution explorer"在"test scripts"中打開"test.sql"(見前圖11)。

· 轉到并修改如下代碼:

--為運行你的工程,請編輯你的工程的test.sql文件。

--這個文件位于solution explorer的"test scripts"文件夾下

--exec incsalaries 50

select dbo.getnetsalary(empno) from sample.dbo.emp

按f5執行該函數,你應該能夠看到相應結果。

六、定義.net clr用戶定義聚合器

現在,我們開始在上一節基礎上在我們的現有方案上添加一個聚合函數。

· 使用"solution explorer",右擊"sampleallinone"工程并轉到"add->aggregate"(以創建一個新的聚合函數)(圖16)。

圖16

· 之后,出現"add new item"對話框。在該對話框內,選擇"aggregate"作為模板,輸入名字"netsal"并點擊"add"(圖17)。

圖17

一旦創建"netsal.vb",接下來以下列方式修改你的代碼:

以下為引用的內容:
imports system
imports system.data
imports system.data.sqlclient
imports system.data.sqltypes
imports microsoft.sqlserver.server
<serializable()> _
<microsoft.sqlserver.server.sqluserdefinedaggregate(format.native)> _
publicstructure netsal
public sumnetsal as sqldouble
public sub init()
'在此加入你的代碼
sumnetsal = 0
end sub
public sub accumulate(byval value as sqldouble)
 '在此加入你的代碼
 dim sal as double = ctype(value, double)
 dim hra as double = sal * 10 / 100
 dim ta as double = 200
 dim gross as double = sal + hra + ta
 dim epf as double = sal * 5 / 100
 dim net as double = gross - epf
 sumnetsal += net
end sub
public sub merge(byval obj as netsal)
 '在此加入你的代碼
 sumnetsal += obj.sumnetsal
end sub
public function terminate() as sqldouble
 '在此加入你的代碼
 return sumnetsal
end function
endstructure

為了測試上面的存儲過程,遵循下列步驟:

· 使用"solution explorer",然后在"test scripts"中打開"test.sql"。

· 轉到最后一行并修改如下代碼:

--為運行你的工程,請編輯你的工程的test.sql文件。

--這個文件位于solution explorer的"test scripts"文件夾下

--exec incsalaries 50

--select dbo.getnetsalary(empno) from sample.dbo.emp

select dbo.netsal(sal) from sample.dbo.emp

按f5執行該函數,你應該能夠觀察到相應的結果。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 枝江市| 若羌县| 肇源县| 烟台市| 陆川县| 中江县| 安化县| 镇江市| 寻甸| 冷水江市| 灵寿县| 长泰县| 永胜县| 临洮县| 古浪县| 临潭县| 蚌埠市| 吉水县| 博爱县| 贵溪市| 岢岚县| 石泉县| 耒阳市| 同江市| 泸西县| 合肥市| 台北县| 日照市| 葫芦岛市| 吉隆县| 阜宁县| 宝兴县| 历史| 桐柏县| 察雅县| 安康市| 连州市| 察隅县| 郁南县| 东城区| 眉山市|