国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区

掃一掃
關(guān)注微信公眾號

SQL Server 2005上的CLR和ADO.NET 2.0
2007-07-29   IT168 





通過集成CLR,SQL Server 2005已經(jīng)獲得了很多新的特性,借助CLR的集成可以用任何.NET語言建立存儲過程、觸發(fā)器、用戶自定義函數(shù)、用戶自定義類型、用戶自定義聚合。通過這個集成筆者認(rèn)為SQL Server主要可以獲得如下優(yōu)勢。

提供了一個更加完善的開發(fā)模型,對于熟悉面向?qū)ο蟮拈_發(fā)人員和一直在SQL Server平臺進(jìn)行T-SQL開發(fā)的開發(fā)人員都提供開發(fā)的舞臺。更深層次講,這兩類開發(fā)人員可以根據(jù)自己熟悉的領(lǐng)域?qū)?yīng)用進(jìn)行優(yōu)化,T-SQL開發(fā)人員可以根據(jù)執(zhí)行計(jì)劃分析和優(yōu)化應(yīng)用,面向?qū)ο箝_發(fā)人員可以根據(jù)已有的Best Practice,借助代碼復(fù)查以優(yōu)化自己的應(yīng)用。

提供了更好的安全性,這個主要來源于CLR運(yùn)行于托管環(huán)境的原因,通過運(yùn)行過程中CAS(Code-Access Security),所有的代碼執(zhí)行過程都是在一個安全的調(diào)用鏈運(yùn)行,與以往不同的是,即便用戶獲得了某個已開發(fā)好的功能的使用權(quán)限,但是如果該功能所使用的某個組件的安全性與目標(biāo)資源的安全性相沖突,也會被CLR判斷為非法。

以往的代碼面臨的主要安全問題如下:

1.非授權(quán)使用或者越權(quán)使用;

2.代碼注入;

3.額外信息泄漏;

4.偽裝、欺騙代碼執(zhí)行;

""498)this.style.width=498;">

圖1:執(zhí)行過程中代碼主要面臨的安全問題

那么在CLR中,執(zhí)行每一個Assembly的時候都要基于既有的或者定制的安全策略進(jìn)行訪問檢查,不僅僅是調(diào)用者權(quán)限檢查,也包括用戶與目標(biāo)資源之間的訪問關(guān)系,更為主要的是在每個功能調(diào)用的過程中,還要檢查每上游組件的安全要求是否與自身安全要求抵觸,如果出現(xiàn)異常,那么這個調(diào)用鏈也會被終止。執(zhí)行過程如下:

""498)this.style.width=498;">

圖2:單個Assembly的執(zhí)行過程

""498)this.style.width=498;">

圖3:Assembly調(diào)用鏈的安全檢查

這樣做的好處在于:可以大大豐富SQL Server的對象系統(tǒng)。

相信很多T-SQL設(shè)計(jì)人員在進(jìn)行數(shù)據(jù)庫設(shè)計(jì)的時候,會碰到因?yàn)橄鄬Ψ浅S邢薜臄?shù)據(jù)類型無法描述業(yè)務(wù)對象的情況。但有了CLR的支持,SQL Server 2005可以描述的對象系統(tǒng)基本上擴(kuò)展為無限。但是,筆者這里根據(jù)經(jīng)驗(yàn)提醒用戶在使用該功能的時候要注意如下幾個內(nèi)容:

1.設(shè)計(jì)新的數(shù)據(jù)對象要考慮到中間結(jié)果的存儲問題。

2.涉及到查詢的時候還是要考慮采用T-SQL,這主要是出于效率問題。

3.盡可能考慮到事件、Delegate回調(diào)對于處理性能的影響,不是必要的話盡量不用。



可以把整個開發(fā)的流程完全集成到統(tǒng)一的Visual Studio 2005中,全開發(fā)生命期可以在一個框架下完成。

更深層次講,在完成統(tǒng)一個項(xiàng)目的時候,可以充分利用CLR進(jìn)行復(fù)雜數(shù)據(jù)結(jié)構(gòu)的計(jì)算能力效率和T-SQL的關(guān)系數(shù)據(jù)處理能力優(yōu)勢。

開發(fā)基于CLR的數(shù)據(jù)庫對象

通過CLR的集成,可以在SQL Server 2005中建立如下的一些數(shù)據(jù)類型:

Scalar-valued user-defined functions (scalar UDFs)

Table-valued user-defined functions (TVFs)

User-defined procedures (UDPs)

User-defined triggers

上述四個類型算是基本的數(shù)據(jù)類型,因?yàn)樗梢灾苯拥赜成涞筋惖墓察o態(tài)方法,除此之外還可以定義更為復(fù)雜的用戶聚合函數(shù)。由于受到訪問能力的限制,在SQL Server 2000中用戶自定義函數(shù)能訪問的對象有限,但是SQL Server 2005借助.NET平臺甚至于可以把一些計(jì)算通過協(xié)調(diào)遠(yuǎn)端的Web Service一并完成。

筆者認(rèn)為,在SQL Server 2005平臺上,開發(fā)人員的思維要具有擴(kuò)展性,不僅要考慮SQL Server 本身支持的內(nèi)容,還要考慮到Windows平臺支持的內(nèi)容、企業(yè)內(nèi)部SOA其他應(yīng)用的支持,直至整個Internet環(huán)境下的任何可以用資源。

""498)this.style.width=498;">

圖3:CLR支持后擴(kuò)展數(shù)據(jù)對象的資源分布

相對而言,開發(fā)User-Function和User-Defined Procedure都是比較容易,這里筆者就開發(fā)CLR 觸發(fā)器作些說明。正如大家所知,Trigger主要包括兩類:“DML 觸發(fā)器”和“DDL 觸發(fā)器”。DML觸發(fā)器主要在DELETE、UPDATE、INSERT的時候觸發(fā),DDL 觸發(fā)器則會在CREATE、ALTER、DROP的時候觸發(fā)。在使用T-SQL編寫觸發(fā)器的時候可以通過INSERTED和DELETED這兩個虛表,結(jié)合COLUMN_UPDATED()函數(shù)完成DML事件的響應(yīng)。在集成了CLR之后,用.NET語言寫觸發(fā)器可以訪問如下內(nèi)容:

繼續(xù)訪問DELETED和INSERTED這兩個虛表;

通過UPDATE操作,判斷哪些列受到了修改;

通過訪問數(shù)據(jù)庫對象獲得DDL的執(zhí)行語句;

除此而外,開發(fā)CLR 觸發(fā)器的時候還可以通過SqlContext.TriggerContext獲得當(dāng)前操作的上下文,明確究竟是DML的INSERT、UPDATE、DELETE,還是DDL的CREATE、DROP、ALTER操作。

代碼示例1:INSERT或DELETE操作的DML觸發(fā)器寫法

SqlConnection connection = new SqlConnection ("context connection = true");

connection.Open();

SqlCommand command = connection.CreateCommand();

command.CommandText = "SELECT * from " + "inserted";

代碼實(shí)例2:判斷哪些列被UPDATE

reader = command.ExecuteReader();

reader.Read();

for (int columnNumber = 0; columnNumber < triggContext.ColumnCount; columnNumber++)

{

pipe.Send("Updated column "

+ reader.GetName(columnNumber) + "? "

+ triggContext.IsUpdatedColumn(columnNumber).ToString());

}

reader.Close();

代碼實(shí)例3:通過訪問Context判斷DLL操作的內(nèi)容

using System;

using System.Data;

using System.Data.Sql;

using Microsoft.SqlServer.Server;

using System.Data.SqlClient;

using System.Data.SqlTypes;

using System.Xml;

using System.Text.RegularExpressions;

public class CLRTriggers

{

public static void DropTableTrigger()

{

SqlTriggerContext triggContext = SqlContext.TriggerContext;

switch(triggContext.TriggerAction)

{

case TriggerAction.DropTable:

SqlContext.Pipe.Send("Table dropped! Here's the EventData:");

SqlContext.Pipe.Send(triggContext.EventData.Value);

break;

default:

SqlContext.Pipe.Send("Something happened!

Here's the EventData:");

SqlContext.Pipe.Send(triggContext.EventData.Value);

break;

}

}

}

SQL Server 2005上的ADO.NET 2.0



SQL Server 2005對于應(yīng)用開發(fā)業(yè)提供了一系列新的功能,不過很多需要通過ADO.NET 2.0來訪問。根據(jù)筆者的經(jīng)驗(yàn),如果您確定您的產(chǎn)品或者項(xiàng)目依托于SQL Server 2005,而不是做數(shù)據(jù)庫產(chǎn)品無關(guān)的通用產(chǎn)品的話,完全可以考慮這些新的特性,但是要注意這些特性很可能會改變您的很多應(yīng)用架構(gòu)。

不會影響到系統(tǒng)構(gòu)架的新特性如下:

(1)新的數(shù)據(jù)類型,包括XML數(shù)據(jù);



(2)支持Snapshot級的事務(wù)隔離級別;

(3) 支持系統(tǒng)快速高可用功能的Mirroring;

但是,下面一些功能將會影響到您的系統(tǒng)架構(gòu):

(1)一步的SQL Server訪問

(2)MARS (Multiple Active Result Set),不僅可以讓您復(fù)用與數(shù)據(jù)庫的連接,而且還可以在源數(shù)據(jù)更新的時候,主動根據(jù)SQL Server觸發(fā)更新。

事務(wù)的控制上,ADO.NET 2.0可以借助SQL Server自己的事務(wù)機(jī)制或者System.Transactions的支持,可以用非常簡單的方式使用本地或者分布式事務(wù)。如果你的數(shù)據(jù)操作僅僅限于當(dāng)前一個固定的SQL Server,那么筆者建議您采用Promotion的輕量級交易機(jī)制。你所要做的就是在SqlConnection的ConnectionString屬性定義時增加一個Enlist關(guān)鍵字即可,這樣當(dāng)你的ADO.NET訪問涉及DML操作時,CLR會自動為您增加一個事務(wù),保證操作的原子性。但如果你的操作不僅僅限于當(dāng)前SQL Server,還要訪問其他異構(gòu)數(shù)據(jù)庫或者隊(duì)列之類的其他對象,那么您需要分布式事務(wù)的支持,這時候您需要在DTC的調(diào)度下,同時使用SQL Server 2005本地事務(wù)、System.Transactions和System.Data.SqlClient三者,把整個處理包裝到一個代價比較昂貴的分布式交易中。總而言之,到底要使用那種事務(wù)處理,要看您的應(yīng)用需要。

筆者要提醒您注意的是,在CLR的托管代碼支持下,SQL Server 2005采用CLR 事務(wù)和T-SQL的事務(wù)有很大的區(qū)別:

CLR中定義的包括事務(wù)的處理內(nèi)容必須被ROLLBACK或者COMMIT,除非SQL Server在處理內(nèi)容沒有執(zhí)行結(jié)束之前出現(xiàn)嚴(yán)重錯誤,導(dǎo)致內(nèi)容不能執(zhí)行結(jié)束。

(1)出現(xiàn)事務(wù)嵌套時,內(nèi)部事務(wù)不可以ROLLBACK或者COMMIT外部的事務(wù)。

(2)不要試圖提交非本Function或者Procedure的事務(wù),這樣會導(dǎo)致Run-Time Error。

(3) 試圖回退非本Function或者Procedure的事務(wù)時,會導(dǎo)致事務(wù)執(zhí)行掛起,借助該特性可以用來調(diào)試事務(wù)內(nèi)部的內(nèi)容。

XML的串行化支持

SQL Server 2000僅僅提供了有限的HTTP直接訪問支持,但是在引入了CLR 集成后,Internet / Intranet應(yīng)用可以借助于XML串行化,直接以XML方式訪問系統(tǒng)的用戶自定義類型數(shù)據(jù),尤其對于給予HTTP訪問BLOB對象的時候也可以支持,此外可以在SQL Server內(nèi)部通過該特性訪問Web Service。

熱詞搜索:

上一篇:啟明星辰天清漢馬防火墻多功能安全網(wǎng)關(guān)
下一篇:Integration Services:高性能策略

分享到: 收藏
国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区
色综合一区二区| 欧美肥大bbwbbw高潮| 在线精品视频一区二区| 亚洲国产日韩在线一区模特| 欧美日韩www| 成人国产亚洲欧美成人综合网| 国产精品国产自产拍高清av| 亚洲精品一区二区三区四区高清| 色综合色综合色综合| 国产成人一区在线| 亚洲风情在线资源站| 一区二区三区视频在线观看| 久久人人爽人人爽| 91麻豆精品国产91| 在线观看欧美黄色| 日韩精品电影在线| 日韩限制级电影在线观看| 欧美精选一区二区| 欧洲av在线精品| 97久久精品人人做人人爽| 丰满少妇久久久久久久| 九九**精品视频免费播放| 五月婷婷久久综合| 亚洲一二三区不卡| 国产精品久久久久久久裸模| 欧美性感一区二区三区| 一本一本久久a久久精品综合麻豆| 不卡一卡二卡三乱码免费网站| 韩国一区二区三区| 美女高潮久久久| 久久99久国产精品黄毛片色诱| 亚洲一二三四区不卡| 亚洲一区影音先锋| 日韩欧美第一区| 精品久久人人做人人爽| 欧美哺乳videos| 天堂在线一区二区| 国产电影一区二区三区| av在线不卡网| 不卡一区在线观看| 欧美视频日韩视频在线观看| 欧美亚州韩日在线看免费版国语版| 欧美中文字幕一区二区三区亚洲| 欧美影视一区二区三区| 制服丝袜亚洲网站| 色猫猫国产区一区二在线视频| 亚洲v日本v欧美v久久精品| 精品一区二区三区免费视频| 北条麻妃一区二区三区| va亚洲va日韩不卡在线观看| 日韩**一区毛片| 精品一区二区三区在线播放视频| 激情综合网最新| 国产成人啪免费观看软件| 成人a级免费电影| 福利一区二区在线| 欧洲人成人精品| 日韩区在线观看| 国产片一区二区三区| 国产欧美日韩综合| 亚洲一线二线三线久久久| 久久久99精品久久| 理论电影国产精品| 不卡的av中国片| 91精品国产全国免费观看| 国产欧美一区二区精品秋霞影院| 亚洲精品免费视频| 国产伦精品一区二区三区在线观看| 国产成人啪免费观看软件| 欧美色成人综合| 国产精品三级视频| 香蕉av福利精品导航| 国产成人免费视频| 欧美一区二区福利在线| 亚洲欧美一区二区视频| 韩国av一区二区三区在线观看| 在线观看精品一区| 精品国产一区二区三区久久影院 | 亚洲国产一区二区三区青草影视| 日韩国产在线一| www.欧美.com| 国产色综合一区| 偷拍日韩校园综合在线| 不卡欧美aaaaa| 亚洲精品一区在线观看| 性久久久久久久久久久久| 欧美在线影院一区二区| 欧美一级搡bbbb搡bbbb| 亚洲精品久久7777| 7777女厕盗摄久久久| 国产伦精品一区二区三区免费| 亚洲色大成网站www久久九九| 精品欧美乱码久久久久久1区2区| 色88888久久久久久影院按摩| 国产精品系列在线观看| 日韩一区二区三区电影在线观看 | 在线观看成人小视频| 亚洲精选视频在线| 欧美xingq一区二区| 久久精品网站免费观看| 国产精品18久久久久久久久久久久| 欧美自拍偷拍一区| 国产精品人妖ts系列视频| 91精品国产综合久久精品app | 日本欧美一区二区| 亚洲卡通动漫在线| k8久久久一区二区三区| 亚洲成人精品在线观看| 中文字幕第一区第二区| 成人欧美一区二区三区白人| 亚洲影视在线播放| 欧美一级搡bbbb搡bbbb| 日韩欧美一级特黄在线播放| 欧美电影精品一区二区| 26uuu另类欧美亚洲曰本| 久久久久综合网| 国产亚洲精久久久久久| 国产欧美一区二区三区在线看蜜臀| 777亚洲妇女| 国产片一区二区| 亚洲免费毛片网站| 欧美aⅴ一区二区三区视频| 免费黄网站欧美| www.欧美精品一二区| 欧美性猛交xxxx乱大交退制版| 精品久久久久一区| 亚洲一区二区三区四区五区中文| 久久电影网站中文字幕| 91丝袜美女网| 中文字幕二三区不卡| 青草国产精品久久久久久| www.日韩大片| 欧美高清在线一区二区| 五月天一区二区三区| 成人性生交大片免费看视频在线| 欧美日本韩国一区| 亚洲国产美女搞黄色| 99re热这里只有精品视频| 日韩精品一区二区在线观看| 蜜臀av国产精品久久久久| 大白屁股一区二区视频| 欧美一级二级在线观看| 蜜桃视频在线观看一区| 欧美午夜精品久久久| 精品一区中文字幕| 9色porny自拍视频一区二区| 成人97人人超碰人人99| 99v久久综合狠狠综合久久| 免费久久精品视频| 奇米影视在线99精品| 奇米影视在线99精品| 久久综合资源网| 午夜在线成人av| 不卡的av在线| 国产亚洲欧洲一区高清在线观看| 日韩精品亚洲专区| 欧美天天综合网| 自拍偷拍欧美精品| 国产亚洲综合在线| 亚洲私人黄色宅男| 蜜臀av一区二区| 成人免费va视频| 成人三级伦理片| 久久精品国产99久久6| 久久精品欧美一区二区三区不卡| 国产一区二三区好的| 91精品国产综合久久国产大片| 香蕉成人啪国产精品视频综合网| 色综合一个色综合亚洲| 国产精品久久午夜| 国产suv精品一区二区6| 亚洲国产高清不卡| 激情综合色播激情啊| 欧美日韩精品一区二区三区蜜桃| 亚洲最大成人综合| 在线不卡中文字幕| 亚洲国产色一区| 97久久精品人人澡人人爽| 亚洲私人影院在线观看| 色久综合一二码| 午夜电影一区二区三区| 91精品国产一区二区三区| 精品一区二区三区av| 中文字幕免费观看一区| 91麻豆成人久久精品二区三区| 亚洲欧美偷拍三级| 在线电影一区二区三区| 久久精品理论片| 中文字幕欧美日韩一区| 在线中文字幕不卡| 日韩高清国产一区在线| 久久亚洲一区二区三区四区| 成人ar影院免费观看视频| 亚洲一区二区在线免费看| 91精品国产综合久久久久久久| 韩国成人福利片在线播放| 自拍偷拍国产精品| 欧美一区二区视频在线观看 | 国产日本亚洲高清| 色综合天天综合狠狠|