CodeSmith存储过程模板

  1 <%@ CodeTemplate Debug="False" Language="C#" Inherits="CodeSmith.BaseTemplates.SqlCodeTemplate" TargetLanguage="T-SQL" CompilerVersion="v3.5"
  2     Description="Generates standard CRUD procedures based on a database table schema." %>
  3 <%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Category="Context" Description="表名" %>
  4 <%@ Property Name="IncludeDropStatements" Type="System.Boolean" Default="True" Category="Options" Description="如果为true,则生成已存在存储过程的脚本" %>
  5 <%@ Property Name="ProcedurePrefix" Type="System.String" Default="usp" Category="Options" Description="所有生成存储过程的前缀。" %>
  6 <%@ Property Name="IncludeInsert" Type="System.Boolean" Default="True" Category="Procedure Types" Description="如果为true,则生成增加存储过程。" %>
  7 <%@ Property Name="IncludeUpdate" Type="System.Boolean" Default="True" Category="Procedure Types" Description="如果为true,则生成根据主键更新的存储过程。" %>
  8 <%@ Property Name="IncludeInsertUpdate" Type="System.Boolean" Default="True" Category="Procedure Types" Description="如果为true,则生成增加更新存储过程。" %>
  9 <%@ Property Name="IncludeDelete" Type="System.Boolean" Default="True" Category="Procedure Types" Description="如果为true,则生成根据主键删除的存储过程。" %>
 10 <%@ Property Name="IncludeDeleteByForeignKey" Type="System.Boolean" Default="True" Category="Procedure Types" Description="如果为true,则生成根据外键删除的存储过程。" %>
 11 <%@ Property Name="IncludeDeleteByIndex" Type="System.Boolean" Default="True" Category="Procedure Types" Description="如果为true,则生成根据索引删除的存储过程。" %>
 12 <%@ Property Name="IncludeSelect" Type="System.Boolean" Default="True" Category="Procedure Types" Description="如果为true,则生成根据主键查询的存储过程。" %>
 13 <%@ Property Name="IncludeSelectAll" Type="System.Boolean" Default="True" Category="Procedure Types" Description="如果为true,则生成查询所有记录的存储过程。" %>
 14 <%@ Property Name="IncludeSelectByForeignKey" Type="System.Boolean" Default="True" Category="Procedure Types" Description="如果为true,则生成根据外键查询的存储过程。" %>
 15 <%@ Property Name="IncludeSelectByIndex" Type="System.Boolean" Default="True" Category="Procedure Types" Description="如果为true,则生成根据索引查询的存储过程。" %>
 16 <%@ Property Name="InsertSufffix" Type="System.String" Default="Insert" Category="Style" Description="生成增加存储过程的后缀。" %>
 17 <%@ Property Name="UpdateSufffix" Type="System.String" Default="Update" Category="Style" Description="生成根据主键更新存储过程的后缀。" %>
 18 <%@ Property Name="InsertUpdateSufffix" Type="System.String" Default="InsertUpdate" Category="Style" Description="生成增加更新存储过程的后缀。" %>
 19 <%@ Property Name="DeleteSufffix" Type="System.String" Default="Delete" Category="Style" Description="生成根据主键删除存储过程的后缀。" %>
 20 <%@ Property Name="SelectSufffix" Type="System.String" Default="Select" Category="Style" Description="生成根据主键查询存储过程的后缀。" %>
 21 <%@ Template Language="C#" TargetLanguage="SQL" %>
 22 <%@ Assembly Name="SchemaExplorer"%>
 23 <%@ Assembly Name="CodeSmith.BaseTemplates" %>
 24 <%@ Assembly Name="CodeSmith.CustomProperties" %>
 25 <%@ Assembly Name="System.Data" %>
 26 <%@ Import Namespace="SchemaExplorer" %>
 27 <%@ Import Namespace="CodeSmith.CustomProperties" %>
 28 <%@ Import Namespace="CodeSmith.BaseTemplates" %>
 29 <%@ Import Namespace="System.Data" %>
 30 <%@ Import Namespace="System.Text.RegularExpressions" %>
 31 <%@ Import Namespace="System.Collections.Generic" %>
 32 <%------------------------------------------------------------------------------------------
 33 *
 34 * Insert Procedure
 35 *
 36 ------------------------------------------------------------------------------------------%>
 37 <%
 38 if (IncludeInsert)
 39 {
 40     if(IncludeDropStatements)
 41     {
 42         GenerateProcedureHeader(GetInsertProcedureName());
 43     }
 44 %>
 45 CREATE PROCEDURE <%= GetInsertProcedureName() %>
 46 <% GenerateParameters(SourceTable.Columns, 1); %>
 47 AS
 48 INSERT INTO <%= GetTableName() %> (
 49     <% GenerateColumns(SourceTable.Columns, 1); %>
 50 ) VALUES (
 51     <% GenerateVariables(SourceTable.Columns, 1); %>
 52 )
 53 <% GenerateProcedureFooter();
 54 }%>
 55 <%------------------------------------------------------------------------------------------
 56 *
 57 * Update Procedure
 58 *
 59 ------------------------------------------------------------------------------------------%>
 60 <%
 61 if (IncludeUpdate)
 62 {
 63     if(SourceTable.PrimaryKey.MemberColumns.Count > 0)
 64     {
 65         if(IncludeDropStatements)
 66         {
 67             GenerateProcedureHeader(GetUpdateProcedureName());
 68         }
 69 %>
 70 CREATE PROCEDURE <%= GetUpdateProcedureName() %>
 71 <% GenerateParameters(SourceTable.Columns, 1); %>
 72 AS
 73 UPDATE <%= GetTableName() %> SET
 74     <% GenerateUpdates(SourceTable.NonPrimaryKeyColumns, 1); %>
 75 WHERE <% GenerateConditions(SourceTable.PrimaryKey.MemberColumns, -1); %>
 76 <% GenerateProcedureFooter();
 77     }
 78 }%>
 79 <%------------------------------------------------------------------------------------------
 80 *
 81 * InsertUpdate Procedure
 82 *
 83 ------------------------------------------------------------------------------------------%>
 84 <%
 85 if (IncludeInsertUpdate)
 86 {
 87     if(SourceTable.PrimaryKey.MemberColumns.Count > 0)
 88     {
 89         if(IncludeDropStatements)
 90         {
 91             GenerateProcedureHeader(GetInsertUpdateProcedureName());
 92         }
 93 %>
 94 CREATE PROCEDURE <%= GetInsertUpdateProcedureName() %>
 95 <% GenerateParameters(SourceTable.Columns, 1); %>
 96 AS
 97 IF EXISTS(SELECT <% GenerateColumns(SourceTable.PrimaryKey.MemberColumns, -1); %> FROM <%= GetTableName() %> WHERE <% GenerateConditions(SourceTable.PrimaryKey.MemberColumns, -1); %>)
 98 BEGIN
 99     UPDATE <%= GetTableName() %> SET
100         <% GenerateUpdates(SourceTable.NonPrimaryKeyColumns, 2); %>
101     WHERE <% GenerateConditions(SourceTable.PrimaryKey.MemberColumns, -1); %>
102 END
103 ELSE
104 BEGIN
105     INSERT INTO <%= GetTableName() %> (
106         <% GenerateColumns(SourceTable.Columns, 2); %>
107     ) VALUES (
108         <% GenerateVariables(SourceTable.Columns, 2); %>
109     )
110 END
111 <% GenerateProcedureFooter();
112     }
113 }%>
114 <%------------------------------------------------------------------------------------------
115 *
116 * Delete Procedure
117 *
118 ------------------------------------------------------------------------------------------%>
119 <%
120 if (IncludeDelete)
121 {
122     if(SourceTable.PrimaryKey.MemberColumns.Count > 0)
123     {
124         if(IncludeDropStatements)
125         {
126             GenerateProcedureHeader(GetDeleteProcedureName());
127         }
128 %>
129 CREATE PROCEDURE <%= GetDeleteProcedureName() %>
130 <% GenerateParameters(SourceTable.PrimaryKey.MemberColumns, 1); %>
131 AS
132 DELETE FROM <%= GetTableName() %>
133 WHERE <% GenerateConditions(SourceTable.PrimaryKey.MemberColumns, -1); %>
134 <% GenerateProcedureFooter();
135     }
136 }%>
137 <%------------------------------------------------------------------------------------------
138 *
139 * Delete By Foreign Key Procedures
140 *
141 ------------------------------------------------------------------------------------------%>
142 <%
143 if (IncludeDeleteByForeignKey)
144 {
145     if(SourceTable.ForeignKeyColumns.Count > 0)
146     {
147         if(IncludeDropStatements)
148         {
149             GenerateProcedureHeader(GetSelectByProcedureName(SourceTable.ForeignKeyColumns));
150         }
151 %>
152 CREATE PROCEDURE  <%= GetDeleteByProcedureName(SourceTable.ForeignKeyColumns) %>
153 <% GenerateParameters(SourceTable.ForeignKeyColumns, 1); %>
154 AS
155 DELETE FROM <%= GetTableName() %>
156 WHERE <% GenerateConditions(SourceTable.ForeignKeyColumns, -1); %>
157 <% GenerateProcedureFooter();
158     }
159 }%>
160 <%------------------------------------------------------------------------------------------
161 *
162 * Delete By Index Procedures
163 *
164 ------------------------------------------------------------------------------------------%>
165 <%
166 if (IncludeDeleteByIndex)
167 {
168     if(SourceTable.Indexes.Count > 0)
169     {
170         foreach(IndexSchema index in SourceTable.Indexes)
171         {
172             string procedureName = GetDeleteByProcedureName(index.MemberColumns);
173             if (!_generatedProcedureNames.Contains(procedureName))
174             {
175                 _generatedProcedureNames.Add(procedureName);
176                 if(IncludeDropStatements)
177                 {
178                     GenerateProcedureHeader(procedureName);
179                 }
180 %>
181 CREATE PROCEDURE <%= procedureName %>
182 <% GenerateParameters(index.MemberColumns, 1); %>
183 AS
184 DELETE FROM <%= GetTableName() %>
185 WHERE <% GenerateConditions(index.MemberColumns, -1);%>
186 <% GenerateProcedureFooter();
187             }
188         }
189     }
190 }%>
191 <%------------------------------------------------------------------------------------------
192 *
193 * Select Procedure
194 *
195 ------------------------------------------------------------------------------------------%>
196 <%
197 if (IncludeSelect)
198 {
199     if(SourceTable.PrimaryKey.MemberColumns.Count > 0)
200     {
201         if(IncludeDropStatements)
202         {
203             GenerateProcedureHeader(GetSelectProcedureName());
204         }
205 %>
206 CREATE PROCEDURE <%= GetSelectProcedureName() %>
207 <% GenerateParameters(SourceTable.PrimaryKey.MemberColumns, 1); %>
208 AS
209 SELECT
210     <% GenerateColumns(SourceTable.Columns, 1); %>
211 FROM <%= GetTableName() %>
212 WHERE <% GenerateConditions(SourceTable.PrimaryKey.MemberColumns, -1); %>
213 <% GenerateProcedureFooter();
214     }
215 }%>
216 <%------------------------------------------------------------------------------------------
217 *
218 * Select All Procedure
219 *
220 ------------------------------------------------------------------------------------------%>
221 <%
222 if (IncludeSelectAll)
223 {
224     if(IncludeDropStatements)
225     {
226         GenerateProcedureHeader(GetSelectAllProcedureName());
227     }
228 %>
229 CREATE PROCEDURE <%= GetSelectAllProcedureName() %>
230 AS
231 SELECT
232     <% GenerateColumns(SourceTable.Columns, 1); %>
233 FROM <%= GetTableName() %>
234 <% GenerateProcedureFooter();
235 }%>
236 <%------------------------------------------------------------------------------------------
237 *
238 * Select By Foreign Key Procedures
239 *
240 ------------------------------------------------------------------------------------------%>
241 <%
242 if (IncludeSelectByForeignKey)
243 {
244     if(SourceTable.ForeignKeyColumns.Count > 0)
245     {
246         if(IncludeDropStatements)
247         {
248             GenerateProcedureHeader(GetSelectByProcedureName(SourceTable.ForeignKeyColumns));
249         }
250 %>
251 CREATE PROCEDURE <%= GetSelectByProcedureName(SourceTable.ForeignKeyColumns) %>
252 <% GenerateParameters(SourceTable.ForeignKeyColumns, 1); %>
253 AS
254 SELECT
255     <% GenerateColumns(SourceTable.Columns, 1); %>
256 FROM <%= GetTableName() %>
257 WHERE <% GenerateConditions(SourceTable.ForeignKeyColumns, -1); %>
258 <% GenerateProcedureFooter();
259     }
260 }%>
261 <%------------------------------------------------------------------------------------------
262 *
263 * Select By Index Procedures
264 *
265 ------------------------------------------------------------------------------------------%>
266 <%
267 if (IncludeSelectByIndex)
268 {
269     if(SourceTable.Indexes.Count > 0)
270     {
271         foreach(IndexSchema index in SourceTable.Indexes)
272         {
273             string procedureName = GetSelectByProcedureName(index.MemberColumns);
274             if (!_generatedProcedureNames.Contains(procedureName))
275             {
276                 _generatedProcedureNames.Add(procedureName);
277                 if(IncludeDropStatements)
278                 {
279                     GenerateProcedureHeader(procedureName);
280                 }
281 %>
282 CREATE PROCEDURE <%= procedureName %>
283 <% GenerateParameters(index.MemberColumns, 1); %>
284 AS
285 SELECT
286     <% GenerateColumns(SourceTable.Columns, 1); %>
287 FROM <%= GetTableName() %>
288 WHERE <% GenerateConditions(index.MemberColumns, -1);%>
289 <% GenerateProcedureFooter();
290             }
291         }
292     }
293 }%>
294 <script runat="template">
295
296 #region     成员变量
297
298 private StringCollection _generatedProcedureNames = new StringCollection();
299
300 #endregion
301
302 #region    辅助方法
303
304 public string GetTableOwner()
305 {
306     if (SourceTable.Owner.Length > 0)return "[" + SourceTable.Owner + "].";
307     return "";
308 }
309
310 public string GetTableName()
311 {
312     return GetTableOwner()+"[" + SourceTable.Name + "]";
313 }
314
315 public void GenerateProcedureHeader(string procedureName)
316 {
317     Response.WriteLine("IF OBJECT_ID(N‘{0}‘) IS NOT NULL", procedureName);
318     GenerateIndent(1);
319     Response.WriteLine("DROP PROCEDURE {0}", procedureName);
320     Response.WriteLine("");
321     Response.WriteLine("GO");
322     Response.WriteLine("");
323     Response.WriteLine("------------------------------------------------------------------------------------------------------------------------");
324     Response.WriteLine("-- 创 建 人: {0}", System.Environment.UserName);
325     Response.WriteLine("-- 创建时间: {0}", DateTime.Now.ToLongDateString());
326     Response.WriteLine("------------------------------------------------------------------------------------------------------------------------");
327 }
328
329 public void GenerateProcedureFooter()
330 {
331     Response.WriteLine("");
332     Response.WriteLine("GO");
333     Response.WriteLine("");
334 }
335
336 public void GenerateIndent(int indentLevel)
337 {
338     for (int i = 0; i < indentLevel; i++)
339     {
340         Response.Write(‘\t‘);
341     }
342 }
343
344 #endregion
345
346 #region    存储过程命名
347
348 public string GetInsertProcedureName()
349 {
350     return String.Format("{0}[{1}{2}{3}]",GetTableOwner(), ProcedurePrefix , GetEntityName(), InsertSufffix);
351 }
352
353 public string GetUpdateProcedureName()
354 {
355     return String.Format("{0}[{1}{2}{3}]",GetTableOwner(), ProcedurePrefix , GetEntityName(), UpdateSufffix);
356 }
357
358 public string GetInsertUpdateProcedureName()
359 {
360     return String.Format("{0}[{1}{2}{3}]",GetTableOwner(), ProcedurePrefix , GetEntityName(), InsertUpdateSufffix);
361 }
362
363 public string GetDeleteProcedureName()
364 {
365     return String.Format("{0}[{1}{2}{3}]",GetTableOwner(), ProcedurePrefix , GetEntityName(), DeleteSufffix);
366 }
367
368 public string GetDeleteByProcedureName(IList<ColumnSchema> targetColumns)
369 {
370     return String.Format("{0}[{1}{2}{3}By{4}]",GetTableOwner(), ProcedurePrefix , GetEntityName(), DeleteSufffix, GetBySuffix(targetColumns));
371 }
372
373 public string GetDeleteByProcedureName(IList<MemberColumnSchema> targetColumns)
374 {
375     return GetDeleteByProcedureName(ConvertMemberColumnSchemaToColumnSchema(targetColumns));
376 }
377
378 public string GetSelectProcedureName()
379 {
380     return String.Format("{0}[{1}{2}{3}]",GetTableOwner(), ProcedurePrefix , GetEntityName(), SelectSufffix);
381 }
382
383 public string GetSelectAllProcedureName()
384 {
385     return String.Format("{0}[{1}{2}{3}All]",GetTableOwner(), ProcedurePrefix , GetEntityName(), SelectSufffix);
386 }
387
388 public string GetSelectByProcedureName(IList<ColumnSchema> targetColumns)
389 {
390     return String.Format("{0}[{1}{2}{3}By{4}]",GetTableOwner(), ProcedurePrefix , GetEntityName(), SelectSufffix, GetBySuffix(targetColumns));
391 }
392
393 public string GetSelectByProcedureName(IList<MemberColumnSchema> targetColumns)
394 {
395     return GetSelectByProcedureName(ConvertMemberColumnSchemaToColumnSchema(targetColumns));
396 }
397
398 public string GetEntityName()
399 {
400     string entityName = SourceTable.Name;
401     return StringUtil.ToPascalCase(entityName);
402 }
403
404 public string GetBySuffix(IList<ColumnSchema> columns)
405 {
406     System.Text.StringBuilder bySuffix = new System.Text.StringBuilder();
407     foreach(var column in columns.AsIndexedEnumerable())
408     {
409         if (!column.IsFirst) bySuffix.Append("And");
410         bySuffix.Append(StringUtil.ToPascalCase(column.Value.Name));
411     }
412
413     return bySuffix.ToString();
414 }
415
416 #endregion
417
418 #region    公共方法
419
420 public void GenerateParameters(IList<ColumnSchema> columns, int indentLevel)
421 {
422     foreach(var column in columns.AsIndexedEnumerable())
423     {
424         GenerateIndent(indentLevel);
425         Response.Write(GetSqlParameterStatement(column.Value));
426         if (!column.IsLast) Response.Write(",");
427         if (indentLevel >= 0)
428         {
429             Response.WriteLine("--" + column.Value.Description);
430         }
431         else if (!column.IsLast)
432         {
433             Response.Write(" ");
434         }
435     }
436 }
437
438 public void GenerateParameters(IList<MemberColumnSchema> columns, int indentLevel)
439 {
440     GenerateParameters(ConvertMemberColumnSchemaToColumnSchema(columns),indentLevel);
441 }
442
443 public void GenerateColumns(IList<ColumnSchema> columns, int indentLevel)
444 {
445     foreach(var column in columns.AsIndexedEnumerable())
446     {
447         GenerateIndent(indentLevel);
448         Response.Write("[");
449         Response.Write(column.Value.Name);
450         Response.Write("]");
451         if (!column.IsLast) Response.Write(",");
452         if (indentLevel >= 0)
453         {
454             Response.WriteLine("");
455         }
456         else if (!column.IsLast)
457         {
458             Response.Write(" ");
459         }
460     }
461 }
462
463 public void GenerateColumns(IList<MemberColumnSchema> columns, int indentLevel)
464 {
465     GenerateColumns(ConvertMemberColumnSchemaToColumnSchema(columns),indentLevel);
466 }
467
468 public void GenerateVariables(IList<ColumnSchema> columns, int indentLevel)
469 {
470     foreach(var column in columns.AsIndexedEnumerable())
471     {
472         GenerateIndent(indentLevel);
473         Response.Write("@");
474         Response.Write(column.Value.Name);
475         if (!column.IsLast) Response.Write(",");
476         if (indentLevel >= 0)
477         {
478             Response.WriteLine("");
479         }
480         else if (!column.IsLast)
481         {
482             Response.Write(" ");
483         }
484     }
485 }
486
487 public void GenerateUpdates(IList<ColumnSchema> columns, int indentLevel)
488 {
489     foreach(var column in columns.AsIndexedEnumerable())
490     {
491         GenerateIndent(indentLevel);
492         Response.Write("[");
493         Response.Write(column.Value.Name);
494         Response.Write("] = @");
495         Response.Write(column.Value.Name);
496         if (!column.IsLast) Response.Write(",");
497         if (indentLevel >= 0)
498         {
499             Response.WriteLine("");
500         }
501         else if (!column.IsLast)
502         {
503             Response.Write(" ");
504         }
505     }
506 }
507
508 public void GenerateConditions(IList<ColumnSchema> columns, int indentLevel)
509 {
510     foreach(var column in columns.AsIndexedEnumerable())
511     {
512         if (!column.IsFirst) Response.Write("AND ");
513         Response.Write("[");
514         Response.Write(column.Value.Name);
515         Response.Write("] = @");
516         Response.Write(column.Value.Name);
517         if (indentLevel >= 0)
518         {
519             Response.WriteLine("");
520         }
521         else if (!column.IsLast)
522         {
523             Response.Write(" ");
524         }
525     }
526 }
527
528 public void GenerateConditions(IList<MemberColumnSchema> columns, int indentLevel)
529 {
530     GenerateConditions(ConvertMemberColumnSchemaToColumnSchema(columns), indentLevel);
531 }
532
533 private IList<ColumnSchema> ConvertMemberColumnSchemaToColumnSchema(IList<MemberColumnSchema> memberColumns)
534 {
535     var columns = new List<ColumnSchema>();
536     columns.AddRange(memberColumns.Cast<ColumnSchema>());
537     return columns;
538 }
539
540 #endregion
541
542 #region 重写方法
543
544 public override string GetFileName()
545 {
546     if (this.SourceTable != null)
547     {
548         return StringUtil.ToPascalCase(this.SourceTable.Name) + "CreateProcedures.sql";
549     }
550     else
551     {
552         return base.GetFileName();
553     }
554 }
555
556 [Category("Options")]
557 [FileDialog(FileDialogType.Save, Title="请选择", Filter="脚本文件 (*.sql)|*.sql|All Files (*.*)|*.*", DefaultExtension=".sql")]
558 public override string OutputFile
559 {
560     get {return base.OutputFile;}
561     set {base.OutputFile = value;}
562 }
563
564 #endregion
565
566 </script>

CodeSmith存储过程模板

时间: 2024-10-10 13:06:33

CodeSmith存储过程模板的相关文章

ahjesus code simith 存储过程模板

<%------------------------------------------------------------------------------------------ * Author: Eric J. Smith * Description: This template will generate standard CRUD stored procedures for a given * database table. ----------------------------

分享一套简单的CodeSmith三层模板

Model: <%@ Template Language="C#" TargetLanguage="C#" %> <%@ Assembly Name="SchemaExplorer" %> <%@ Import Namespace="SchemaExplorer" %> <%@ Property Name="SourceTable" Type="Schem

sqlserver2005 存储过程模板及调用

本模板主要提供快速创建一个存储过程 本例子中包含:循环游标,事务 USE [数据库名称] GO /****** 脚本日期: 11/25/2014 01:05:48 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [用户].[存储过程名称] @epId varchar(20), @bizname varchar(150), @resValue varchar(2) OUTPUT AS BEGIN S

20150825 C# 调用带参数的存储过程 模板

////// exec proceudre2                        //System.Data.SqlClient.SqlConnection sqlcon = new System.Data.SqlClient.SqlConnection("server=(local);database=pubs;uid=sa;pwd=;");                        System.Data.SqlClient.SqlConnection sqlcon

某公司的存储过程模板(摘抄自高大神的博客)

create procedure [usp_my_procedure_name] as begin set nocount on; declare @trancount int; set @trancount = @@trancount; begin try if @trancount = 0 begin transaction else save transaction usp_my_procedure_name; -- Do the actual work here lbexit: if @

SqlServer存储过程模板

create procedure [spname]([spvariable])asbegin begin transaction begin try  --具体sql过程  commit; end try begin catch  rollback; end catchend

mysql 总结二(自定义存储过程)

mysql执行流程: sql命令--->mysql引擎-----(分析)---->语法正确-----(编译)--->可识别命令----(执行)---->执行结果---(返回)--->客户端. 存储过程定义: sql语句和控制语句的预编译集合,以一个名称存储作为一个单元处理. 最重要的优点: 省略部分执行流程,提高执行速度. 其他优点: 增强sql语句的功能和灵活性,减少网络流量(http只传输参数和存储函数名). -------------------------------

CodeSmith 使用说明

〇.            前言 最近两天自己写了个简单的ORM框架,非常的Easy,但是没有相应的代码生成工具,于是就很杯具了! 于是乎,花费了一天的时间学习并写了一个CodeSmith可以使用的模板.在此记录下CodeSmith的学习笔记. 所用工具: CodeSmith Professional v5.1.3.8510,代码示例全部是以C#为例. 一.            工具设置 CodeSmith默认是不支持中文的,那么我们必须要先设置使其支持中文显示,保存.并且要能够在生成文件中支

Sql Server 存储过程使用技巧

1.创建带Try...Catch的存储过程模板 Copy下面的代码,然后新建查询,就可以写sql语句,执行完后,一个你自己的存储过程就建立好了! USE [DB]--设定对应的数据库 GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- AUTHOR: -- DESCRIBE: -- ==============================