日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CodeSmith基础(二)

發(fā)布時間:2023/12/18 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CodeSmith基础(二) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
??????? 本文將介紹CodeSmith與數(shù)據(jù)庫進行交互生成相應(yīng)的存儲過程,本例使用的數(shù)據(jù)庫為SQL Server 2000。
??????? 在與數(shù)據(jù)庫進行交互時,我們使用到了一個CodeSmith自帶的組件SchemaExplorer,利用這個組件我們可以訪問數(shù)據(jù)庫的數(shù)據(jù)表、存儲過程、視圖等,并可以得到相應(yīng)的數(shù)據(jù)類型、標識列、列的(字段)名稱等信息。
??????? 下面這個例子是教我們?nèi)绾紊梢粋€存儲過程,雖然網(wǎng)上有很多一樣的例子,但是我是從CodeSmith中的英文幫助中自己翻譯出來的:)
??????? 使用的是SQL Server 2000自帶的Northwind數(shù)據(jù)庫,生成一個關(guān)于Orders訂單表的更新存儲過程。

??????? 第一步還是指明模板使用的語言和生成的目標語言。
<%@?CodeTemplate?Language="C#"?TargetLanguage="T-SQL"?Description="Generates?a?update?stored?procedure."?%>
??????? 第二步就是我們要加載使用訪問數(shù)據(jù)庫的組件SchemaExplorer,并聲明其使用的命名空間。
<%@?Assembly?Name="SchemaExplorer"?%>
<%@?Import?Namespace="SchemaExplorer"?%>
??????? 因為是針對表去生成存儲過程,則首先要定義一個存儲表名稱使用的變量,然后指明這個變量類型為數(shù)據(jù)庫中的表,這樣我們可以通過這個數(shù)據(jù)表類型的變量得到相應(yīng)的表的信息。
<%@?Property?Name="SourceTable"?Type="SchemaExplorer.TableSchema"?Category="Context"??Description="Table?that?the?stored?procedures?should?be?based?on."?%>
??????? 如果想訪問視圖的話,則將變量類型Type中的SchemaExplorer.TableSchema修改為SchemaExplorer.ViewSchema即可。
????????得到表名的方法
CREATE?PROCEDURE?dbo.Update<%=?SourceTable.Name?%>
??????? 下面利用循環(huán)語句遍歷表的各個列,拼出存儲過程需要傳遞的參數(shù)。
<%?for?(int?i?=?0;?i?<?SourceTable.Columns.Count;?i++)?{?%>
<%=?GetSqlParameterStatement(SourceTable.Columns[i])?%><%?if?(i?<?SourceTable.Columns.Count?-?1)?{?%>,<%?}?%>
<%?}?%>
??????? 調(diào)用的GetSqlParameterStatement方法是用來生成參數(shù)的字符串,例如生成“@CustomerID nchar(5)”,后邊緊跟的if判斷是用來生成參數(shù)之間相隔使用的逗號的。
??????? 生成參數(shù)字符串的方法,參數(shù)為SchemaExplorer.ColumnSchema列類型
?1?<script?runat="template">
?2?public?string?GetSqlParameterStatement(ColumnSchema?column)
?3?{
?4???????string?param?=?"@"?+?column.Name?+?"?"?+?column.NativeType;
?5??
?6???????switch?(column.DataType)
?7???????{
?8?????????????case?DbType.Decimal:
?9?????????????{
10???????????????????param?+=?"("?+?column.Precision?+?",?"?+?column.Scale?+?")";
11???????????????????break;
12?????????????}
13?????????????default:
14?????????????{
15???????????????????if?(column.Size?>?0)
16???????????????????{
17?????????????????????????param?+=?"("?+?column.Size?+?")";
18???????????????????}
19???????????????????break;
20?????????????}
21???????}
22??
23???????return?param;
24?}
25?</script>
??????? 下面來生成需要更新的字段,更新時僅能更新非主鍵字段的值,在SchemaExplorer中支持這種區(qū)別,使用SourceTable.NonPrimaryKeyColumns即可得到非主鍵字段的集合。
1UPDATE?[<%=?SourceTable.Name?%>]?SET
2??????<%?for?(int?i?=?0;?i?<?SourceTable.NonPrimaryKeyColumns.Count;?i++)?{?%>
3??????[<%=?SourceTable.NonPrimaryKeyColumns[i].Name?%>]?=?@<%=?SourceTable.NonPrimaryKeyColumns[i].Name?%><%?if?(i?<?SourceTable.NonPrimaryKeyColumns.Count?-?1)?{?%>,<%?}?%>
4??????<%?}?%>

??? 然后再使用SourceTable.PrimaryKey.MemberColumns得到數(shù)據(jù)表中的主鍵集合,生成更新條件

1?WHERE
2???????<%?for?(int?i?=?0;?i?<?SourceTable.PrimaryKey.MemberColumns.Count;?i++)?{?%>
3???????<%?if?(i?>?0)?{?%>AND?<%?}?%>
4???????[<%=?SourceTable.PrimaryKey.MemberColumns[i].Name?%>]?=?@<%=?SourceTable.PrimaryKey.MemberColumns[i].Name?%>
5???????<%?}?%>
??? 以下為整體的代碼結(jié)構(gòu)
?1?<%@?CodeTemplate?Language="C#"?TargetLanguage="T-SQL"
?2???????Description="Generates?a?update?stored?procedure."?%>
?3??
?4?<%@?Property?Name="SourceTable"?Type="SchemaExplorer.TableSchema"
?5???????Category="Context"
?6???????Description="Table?that?the?stored?procedures?should?be?based?on."?%>
?7??
?8?<%@?Assembly?Name="SchemaExplorer"?%>
?9??
10?<%@?Import?Namespace="SchemaExplorer"?%>
11???????
12?<script?runat="template">
13?public?string?GetSqlParameterStatement(ColumnSchema?column)
14?{
15???????string?param?=?"@"?+?column.Name?+?"?"?+?column.NativeType;
16??
17???????switch?(column.DataType)
18???????{
19?????????????case?DbType.Decimal:
20?????????????{
21???????????????????param?+=?"("?+?column.Precision?+?",?"?+?column.Scale?+?")";
22???????????????????break;
23?????????????}
24?????????????default:
25?????????????{
26???????????????????if?(column.Size?>?0)
27???????????????????{
28?????????????????????????param?+=?"("?+?column.Size?+?")";
29???????????????????}
30???????????????????break;
31?????????????}
32???????}
33??
34???????return?param;
35?}
36?</script>
37??
38?-----------------------------------------------------------------
39?--?Date?Created:?<%=?DateTime.Now.ToLongDateString()?%>
40?--?Created?By:???Generated?by?CodeSmith
41?-----------------------------------------------------------------
42??
43?CREATE?PROCEDURE?dbo.Update<%=?SourceTable.Name?%>
44???????<%?for?(int?i?=?0;?i?<?SourceTable.Columns.Count;?i++)?{?%>
45???????<%=?GetSqlParameterStatement(SourceTable.Columns[i])?%><%?if?(i?<?SourceTable.Columns.Count?-?1)?{?%>,<%?}?%>
46???????<%?}?%>
47?AS
48??
49?UPDATE?[<%=?SourceTable.Name?%>]?SET
50???????<%?for?(int?i?=?0;?i?<?SourceTable.NonPrimaryKeyColumns.Count;?i++)?{?%>
51???????[<%=?SourceTable.NonPrimaryKeyColumns[i].Name?%>]?=?@<%=?SourceTable.NonPrimaryKeyColumns[i].Name?%><%?if?(i?<?SourceTable.NonPrimaryKeyColumns.Count?-?1)?{?%>,<%?}?%>
52???????<%?}?%>
53?WHERE
54???????<%?for?(int?i?=?0;?i?<?SourceTable.PrimaryKey.MemberColumns.Count;?i++)?{?%>
55???????<%?if?(i?>?0)?{?%>AND?<%?}?%>
56???????[<%=?SourceTable.PrimaryKey.MemberColumns[i].Name?%>]?=?@<%=?SourceTable.PrimaryKey.MemberColumns[i].Name?%>
57???????<%?}?%>
58?

轉(zhuǎn)載于:https://www.cnblogs.com/Bear-Study-Hard/archive/2005/12/19/300142.html

總結(jié)

以上是生活随笔為你收集整理的CodeSmith基础(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 免费a v在线| 麻豆传媒映画官网 | 中文字幕成人在线视频 | 日韩在线三区 | 久久网av | 涩色视频 | 中文字幕日韩在线观看 | 毛茸茸成熟亚洲人 | 99久久综合 | 国产午夜三级一区二区三 | 91视频免费在线观看 | 欧美性网址 | 国产农村熟妇videos | 成人91免费视频 | 亚洲 小说区 图片区 | 99er这里只有精品 | 日本美女啪啪 | 日韩天堂av | 久久久久久久久久91 | 首尔之春在线看 | 影音先锋亚洲一区 | 国产在线v| 国产又黄又粗又长 | 伊人精品在线视频 | 国产精品精东影业 | 欧美精品一区二区三区蜜臀 | 尤物毛片| 亚洲精品久久久中文字幕 | 姑娘第5集在线观看免费 | 日韩欧美一区在线观看 | 蜜臀在线播放 | av综合一区| 国产高清视频免费 | 久久久久久久久久久久 | 午夜在线观看视频 | 青青草.com| 夜夜操国产 | 亚洲视频四区 | 国产精品久久亚洲7777 | 精品999久久久一级毛片 | 视频网站在线观看18 | 日韩一区二区免费在线观看 | 亚洲乱视频 | www.青青草.com | 亚洲蜜臀av乱码久久精品蜜桃 | 久久久久久成人精品 | 国产三级福利 | 成人高清免费观看 | 国产成人精品网站 | 色av中文字幕 | av小说在线观看 | 奇米二区 | 激情四射av | 日韩欧美视频在线 | 色日韩 | 亚洲va韩国va欧美va | 色悠悠在线视频 | 久久精品久久国产 | 久久精品123 | 91av在线播放 | 正在播放木下凛凛xv99 | 国产精品高潮呻吟久久久久久 | 精品国产乱码久久久久久郑州公司 | 奇米影视久久 | 午夜美女网站 | 日韩视频 中文字幕 | aaa一区二区三区 | 午夜福利视频 | 神马午夜在线观看 | 免费在线激情视频 | 大肉大捧一进一出好爽视频 | 狠狠躁夜夜躁人爽 | 国产精品久久久久久久9999 | 日韩欧美黄色片 | 日本网站在线看 | 成年人黄色片 | 亚洲精品国产一区二 | 青青草毛片 | 免费成年人视频 | 两性囗交做爰视频 | 激情宗合网| 武侠古典av | 久久无吗视频 | 午夜精品导航 | 亚洲免费视 | 日韩精品第1页 | fc2成人免费视频 | 欧美综合激情网 | 青青在线播放 | 波多野结衣高清在线 | 欧美天天性影院 | 99人妻碰碰碰久久久久禁片 | 公车激情云雨小说 | fc2ppv色の美マンに中出し | 欧美日韩在线视频一区二区 | 久久久久99精品成人片毛片 | 乱日视频 | xxxxx亚洲 | 理论在线视频 |