<本實例基於.net 3.5, sql server 2008 R2, silverlight 4>
在前人的基礎上進行反思。
看到一個相對舊的應用系統,可以在界面輸入拼音首字母而完成中文字符串,可是,這個系統是需要在用戶數據庫中的用戶表中建立拼音列的,且用sql字符串匹配進行拼音查詢。這樣的話,與用戶數據庫產生耦合不說,還不能處理多音字,於是本人開發了這個拼音查詢。拼音碼表采用winxp中文版拼音輸入法轉換而來的碼表,可處理unicode中文統一字符集的20902個漢字的拼音。
開發完成后進行測試,首先做好的模塊集成進sql server 2008 r2,作為clr用戶定義標量函數
然后在數據庫中建立如下測試表
CREATE TABLE [dbo].[TextTest](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Text] [nvarchar](100) NOT NULL
再執行如下sql腳本填充測試數據,十萬條隨機中文串,長度為3~15個中文字符
delete from texttest
dbcc checkident ('texttest',reseed,0)
declare @count int;
declare @len int
declare @i int
declare @text nvarchar(50)
set @count = 1
while (@count <= 100000)
begin
set @len = cast((RAND() * 13 + 3) as int)
set @i = 1
set @text = ''
while(@i <= @len)
begin
set @text = @text + NCHAR(cast((RAND() * 20902 + 19968) as int))
set @i = @i + 1
end
insert into texttest (text) values(@text)
set @count = @count + 1
end
表中數據如下(前100條)
ID Text
----------- ----------------------------------------------------------------------------------------------------
1 滇輿的圇陙奕吽礎喈鬥賢
2 葨檂湄鮺
3 銚銹黋癟肭獠翝轟襅史
4 溵訓觮旴貢姀貖螝牊倗運
5 矸蓆鐓綐蠲計鸝暀怙控鶋許
6 訉弾盡朼駂烚迣軲鸌飯搇
7 籕蟶窾観篩柣
8 癟饙檋釭伏葉唭鱗襨蓔
9 肔蓓頿禙
10 愉摏獔卩鱺窫顯埵鮛魏攲蛦篹猨嚦
11 銷昢腢玥暷嶮勥椈昋矋斫胲抗
12 聊艴啌堄嚨澯垵疩轂薎霰濺鎕砠礫
13 是幒淢鳪秝烻藡獷訳
14 罥惈烣鶇枿軖駊墯籢恱搶贇踾妨邚
15 鏺慁莓鈋力螢刄頠瞠鑌棻螘
16 酆鏏弔禮涇鱋秓揳鈏摳芻誦昜淁戛
17 坫痺剿饈楠懠湑裶
18 憅貭嗱緸緂貿
19 鰜癀裧傐鏰健綽渴罉裗婣
20 軥樲鬊咄敍齆幗竮糛
21 緻郙旄瞇灟瀐膃砦扺刪堫粊巍阨毢
22 怒紗礅箍卍
23 籵鏊詘簵褳潘兠亢帆貖陗敺鋥
24 鄀謾毿糱
25 鏤淐臣獴礬獖鬏絧哱笈墾釆縅堖洽
26 覆論鼮卡臈昵
27 粰璱裀翝蘀逢佊椰済翄
28 釵障苣喠餉窟睞髕會琵郻馶童凘
29 彵高峞
30 彎哪恅駳笪邪
31 繚駱俜茟寲鏹矖衋飹齵舋酀耲
32 訢嶄挹葫嶕賅焧蔑咴拉
33 摡駔琨灓鬅枸蠅遤琉鷳巕
34 庒鈍輄獀共溥倀偹袸螭擼笜怯濢
35 伆傒俷
36 則綳伒鏖弍隲姊鱯領氭漜駿犿斗
37 赬位弍勃艞臹覓
38 樻鵑喘祒就
39 牳懜光縫蜶
40 晻唱叨
41 翮幑雅聴闐
42 欦丙爽頇
43 鞼榸鏠衢鞴
44 彆犰撟遢栬怤鐟獊鯧聏罭訯
45 浚鰃斜晎攅漺鸆饢貊傪鈳乍
46 啢緧璇齬仄瀗鈡伒捆所圚
47 嘷徊覹酪抭俌鶢矤圪烴祆熗僯鵤貽
48 乽妏盆芘転輰蒦燂縙禚
49 聴磌桰窄瘍礦煰煊慢聏倒紤
50 罯勼沖痵厁致夯茅裔醊寏吋萎懖
51 鳿仩爍糛柃猙鼔
52 坮妙框私境鳤濱聫
53 磵譅幟挧受兯抦姟緻還鵃
54 驩騙桻賫憙徏鰵坕弄匣臚絇
55 鏒蠪侑矐崨焮踔儲潾焰槗
56 顯棫單碦譯
57 爣曁簿鞋哴囙罱屩凄蚘簾
58 虇創膒翠腖樵嫆綱皿績噎喯殲
59 鬧鑩劭頫欕
60 磀搟犈
61 叚炛蠡桝宀仢奫攳癵
62 瘽婯檑
63 鼭襌瘠矬圡
64 夅頸口庎繗礿肰玡
65 貀欣扯願鈞編巋駵傘爐
66 雜塐宸線擐誥錁丕弁鍺閝挿
67 罀噕覉橔喩瘵謢瑙旘埮
68 媬襣花嘕弙譑廘羑盧詈臶
69 呶澆蝖沅
70 瓻膎笤鯒吁埄舎罋駟瓚逐濉昒
71 炇牾鳳珯
72 瀾詅擾鞃
73 沮玍黣戺
74 銛見抻慂
75 筆瀥酸鍛訌蘫娕誚惻繱垁
76 魛畿齍関薅隖鴮嗩導懼莑爫矁
77 刡圌汎厞
78 楑帞俏鄺艷
79 鉹喗蹮
80 寮鈺閸揉垘疰
81 姎嚍簰榡坦聽揙囜矺弣掓勌醽蓅
82 峹默放蚹鍕擱翲鄘氉脡弳犼黿
83 梏洽烕藊沐糒
84 跅詇跋樇述虂焟驍秹轀憘籎
85 烙鑤杙朵篁疊畸妝
86 絮窪棢
87 瑵嚄贃諀櫠細醄矝硠枷踠
88 剄罬禇
89 荅俯寃櫴碿抄鴩熛燓緆俬頶睹歝
90 躓觨邂麗濧躬鮁
91 嶒乇懦蟵靜逰楬觰熎諷顥
92 悙佑灧鰰挃警
93 睝蘄掣
94 沍尮醾痥淃俽灤蕢弛掅躷睔
95 蘘燜銣洩墸
96 鄏雺芀闋庶噴朢
97 鈈冓瞥簢塓瞳猶灕蒲絝觓允
98 娏逓摟
99 闂崰詢抐錩姿鉣
100 阝弅惣攦罵蚿蹋
(100 row(s) affected)
執行如下sql腳本獲取拼音
select top 100
id,
text,
dbo.GetPinyinString(text,1,'{','}',0,',',0) as py,
dbo.GetPinyinString(text,0,'{','}',0,',',1) as fullpy
from TextTest
結果
執行如下sql腳本進行匹配測試
select
id,
text,
dbo.GetPinyinString(text,1,'{','}',0,',',0) as py
from TextTest
where dbo.PinyinMatchChinese(text,'asd',1,'{','}',',',0) = 1
匹配結果
最后,於silverlight4 autocomplete組件呈現