1using System;
2using System.Reflection;
3using System.Data;
4using System.Configuration;
5
6using HZAllview.Console.Utility;
7namespace HZAllview.Console.Data.Common
8{
9///
10/// 数据库操作的一些常用函数。
11/// written by tmc
12///
13public abstract class AdoUtil
14{
15
16#region Factory
17
18///
19/// 根据配置文件指定的数据驱动提供者,加载相应的程序集
20///
21/// DbTable对象
22public static AdoUtil Create()
23{
24//获得程序集路径
25string path = AdoConfig.AssemblyPath;
26//类名
27string className = path + ".DbUtil";
28
29//加载程序集
30Assembly assembly = Assembly.Load(path);
31
32//创建对象的实例
33object adoUtil = assembly.CreateInstance(className);
34if( adoUtil is AdoUtil )
35{
36return adoUtil as AdoUtil;
37}
38else
39{
40throw new InvalidOperationException( className +" 没有继承抽象类 HZAllview.Console.Data.Common.AdoUtil " );
41}
42
43}
44
45#endregion
46
47#region Format Date
48
49///
50/// 格式化日期字符串
51///
52/// param name="dateValue"日期字符串/param
53///
54public abstract string FormatDateString(string dateValue);
55
56///
57/// 格式化日期的年份字段
58///
59/// param name="dateField"日期字段/param
60///
61public abstract string DatePartYear(string dateField);
62
63///
64/// 格式化日期的月份字段
65///
66/// param name="dateField"日期字段/param
67///
68public abstract string DatePartMonth(string dateField);
69
70///
71/// 格式化日期的日字段
72///
73/// param name="dateField"日期字段/param
74///
75public abstract string DateParDay(string dateField);
76
77#endregion
78
79#region Constraint
80///
81/// 获得数据库中所有的主键
82///
83///
84/// 返回DataTable,列如下
85/// PKTable 主键表
86/// PKConstraint 主键
87/// KeyCol1 主键字段
88///
89public abstract DataTable GetPKConstraint();
90
91///
92/// 获得数据库中所有的外键
93///
94///
95/// 返回DataTable,列如下
96/// PKTable 主键表
97/// FKTable 外键表
98/// FKConstraint 外键
99/// KeyCol1 主键字段
100/// RefCol1 外键字段
101///
102public abstract DataTable GetFKConstraint();
103
104///
105/// Disable主键
106///
107/// param name="pkTableName"主键表/param
108/// param name="pkConstraint"主键/param
109public abstract void DisablePKConstraint(string pkTableName,string pkConstraint);
110
111///
112/// Disable外键
113///
114/// param name="fkTableName"外键表/param
115/// param name="fkConstraint"外键/param
116public abstract void DisableFKConstraint(string fkTableName,string fkConstraint);
117
118///
119/// Enable主键
120///
121/// param name="pkTableName"主键表/param
122/// param name="pkConstraint"主键/param
123/// param name="pkField"主键字段/param
124public abstract void EnablePKConstraint(string pkTableName,string pkConstraint,string pkField);
125
126///
127/// Enable外键
128///
129/// param name="fkTableName"外键表/param
130/// param name="fkConstraint"外键/param
131/// param name="fkField"外键字段/param
132/// param name="pkTableName"主键表/param
133/// param name="pkField"主键字段/param
134public abstract void EnableFKConstraint(string fkTableName,string fkConstraint,string fkField,string pkTableName,string pkField);
135
136///
137/// 删除主键
138///
139/// param name="pkTableName"主键表/param
140/// param name="pkConstraint"主键/param
141public abstract void DropPKConstraint(string pkTableName,string pkConstraint);
142
143///
144/// 删除外键
145///
146/// param name="fkTableName"外键表/param
147/// param name="fkConstraint"外键/param
148public abstract void DropFKConstraint(string fkTableName,string fkConstraint);
149
150///
151/// 创建主键
152///
153/// param name="pkTableName"主键表/param
154/// param name="pkConstraint"主键/param
155/// param name="pkField"主键字段/param
156public abstract void CreatePKConstraint(string pkTableName,string pkConstraint,string pkField);
157
158///
159/// 创建外键
160///
161/// param name="fkTableName"外键表/param
162/// param name="fkConstraint"外键/param
163/// param name="fkField"外键字段/param
164/// param name="pkTableName"主键表/param
165/// param name="pkField"主键字段/param
166public abstract void CreateFKConstraint(string fkTableName,string fkConstraint,string fkField,string pkTableName,string pkField);
167
168#endregion
169
170#region Identity
171///
172/// 允许将显式值插入表的标识列中
173///
174/// param name="tableName"表名/param
175public virtual void SetIdentityInsertOn(string tableName)
176{
177}
178
179///
180/// 不允许将显式值插入表的标识列中
181///
182/// param name="tableName"表名/param
183public virtual void SetIdentityInsertOff(string tableName)
184{
185}
186
187///
188/// 允许将显式值插入表的标识列中
189///
190/// param name="tableName"表名/param
191public virtual string GetIdentityInsertOn(string tableName)
192{
193return "";
194}
195
196///
197/// 不允许将显式值插入表的标识列中
198///
199/// param name="tableName"表名/param
200public virtual string GetIdentityInsertOff(string tableName)
201{
202return "";
203}
204
205///
206/// 获得下一个递增的ID。如果是ORACLE则返回下一个序列
207///
208/// param name="sName"递增的字段或序列/param
209/// 下一个递增的ID
210public abstract object NextIncreaseID(string seqName);
211
212#endregion
213
214#region Table
215///
216/// 获得数据库中所有的表
217///
218/// 以DataTable返回表的名称
219public abstract DataTable GetTableNames();
220
221///
222/// 获得数据中表的注释
223///
224/// 以DataTable返回表的注释
225public abstract DataTable GetTableComments();
226
227///
228/// 获得数据中表的注释
229///
230/// 返回表的注释
231public abstract string GetTableComments(string tableName);
232
233///
234/// 格式化表名
235///
236/// param name="tableName"表名/param
237///
238public virtual string FormatTableName(string tableName)
239{
240return tableName;
241}
242
243#endregion
244
245#region Field
246///
247/// 获得指定表中的所有字段名称
248///
249/// param name="TableName"指定的表名/param
250/// 以DataTable返回字段的名称
251public abstract DataTable GetFieldNames(string tableName);
252
253///
254/// 获得数据中字段的注释
255///
256/// 以DataTable返回字段的注释
257public abstract DataTable GetFieldComments();
258
259///
260/// 获得数据中字段的注释
261///
262/// 以DataTable返回字段的注释
263public abstract DataTable GetFieldComments(string tableName);
264
265///
266/// 获得数据中字段的注释
267///
268/// 返回字段的注释
269public abstract string GetFieldComments(string tableName,string fieldName);
270
271#endregion
272
273#region View
274///
275/// 判断是否存在对应的视图
276///
277/// param name="viewName"视图名/param
278/// 存在返回true,不存在返回fasle
279public abstract bool ExistView(string viewName);
280
281///
282/// 获得数据库中所有的用户视图
283///
284/// 以DataTable返回视图的名称
285public abstract DataTable GetViewNames();
286
287///
288/// 获得指定视图的内容
289///
290/// param name="viewName"视图名/param
291///
292public abstract string GetViewText(string viewName);
293
294///
295/// 删除数据库视图
296///
297/// param name="viewName"视图名/param
298public abstract void DropView(string viewName);
299
300///
301/// 创建数据库视图
302///
303/// param name="viewName"视图名/param
304/// param name="viewText"视图内容/param
305public abstract void CreateView(string viewName,string viewText);
306
307#endregion
308
309#region Procedure
310///
311/// 获得数据库中所有的用户存储过程
312///
313/// 以DataTable返回存储过程的名称
314public abstract DataTable GetProcedureNames();
315
316///
317/// 获得指定存储过程的内容
318///
319/// param name="procedureName"存储过程名/param
320///
321public abstract string GetProcedureText(string procedureName);
322
323///
324/// 删除数据库存储过程
325///
326/// param name="functionName"存储过程名/param
327public abstract void DropProcedure(string procedureName);
328
329///
330/// 创建数据库存储过程
331///
332/// param name="procedureName"存储过程名/param
333/// param name="procedureText"存储过程内容/param
334public abstract void CreateProcedure(string procedureName, string procedureText);
335
336#endregion
337
338#region Function
339///
340/// 获得数据库中所有的用户函数
341///
342/// 以DataTable返回函数的名称
343public abstract DataTable GetFunctionNames();
344
345///
346/// 获得指定函数的内容
347///
348/// param name="functionName"函数名/param
349///
350public abstract string GetFunctionText(string functionName);
351
352///
353/// 删除数据库函数
354///
355/// param name="functionName"函数名/param
356public abstract void DropFunction(string functionName);
357
358///
359/// 创建数据库函数
360///
361/// param name="functionName"函数名/param
362/// param name="functionText"函数内容/param
363public abstract void CreateFunction(string functionName, string functionText);
364
365#endregion
366
367#region Trigger
368///
369/// 返回数据库中所有的触发器
370///
371///
372/// 返回的DataTable列
373/// TriggerName 触发器名称
374/// TableName 触发器所在表名
375/// /returns
376public abstract DataTable GetTriggerName();
377
378///
379/// 删除触发器
380///
381/// param name="triggerName"触发器名称/param
382public abstract void DropTrigger(string triggerName);
383
384///
385/// 创建触发器
386///
387/// param name="triggerName"触发器名称/param
388/// param name="triggerText"触发器内容/param
389public abstract void CreateTrigger(string triggerName,string triggerText);
390
391///
392/// Enable触发器
393///
394/// param name="triggerName"触发器名称/param
395/// param name="tableName"触发器所在表名/param
396public abstract void EnableTrigger(string triggerName,string tableName);
397
398///
399/// Disable触发器
400///
401/// param name="triggerName"触发器名称/param
402/// param name="tableName"触发器所在表名/param
403public abstract void DisableTrigger(string triggerName,string tableName);
404
405#endregion
406
407}
408}
409
410
411
412
413
414程序代码:
415using System;
416using System.Data;
417using System.Data.OracleClient;
418using HZAllview.Console.Data.Common;
419
420namespace HZAllview.Console.Data.Oracle
421{
422/// summary
423/// Oracle 数据库操作的一些常用函数
424/// written by tmc
425/// /summary
426public class DbUtil : AdoUtil
427{
428
429#region Construction
430/// summary
431/// 需要预设的构造函数,以便工厂能被创建
432/// /summary
433public DbUtil()
434{
435
436}
437#endregion
438
439#region Format Date
440/// summary
441/// 格式化日期字符串
442/// /summary
443/// param name="dateValue"日期字符串/param
444/// returns/returns
445public override string FormatDateString(string dateValue)
446{
447if(dateValue == null || dateValue == "")
448return "''";
449
450dateValue = dateValue.Replace("00:00:00","").Trim(); //如果不存在"小时:分:妙",则剔除"00:00:00"
451
452//如果包含"小时:分:妙"
453if(dateValue.IndexOf(":") != -1)
454{
455return "TO_DATE('"+dateValue+"','YYYY-MM-DD HH24:MI:SS')";
456
457}
458else
459{
460return "TO_DATE('"+dateValue+"','YYYY-MM-DD')";
461}
462}
463
464/// summary
465/// 格式化日期的年份字段
466/// /summary
467/// param name="dateField"日期字段/param
468/// returns/returns
469public override string DatePartYear(string dateField)
470{
471return " TO_CHAR("+dateField+", 'YYYY')";
472}
473
474/// summary
475/// 格式化日期的月份字段
476/// /summary
477/// param name="dateField"日期字段/param
478/// returns/returns
479public override string DatePartMonth(string dateField)
480{
481return " TO_CHAR("+dateField+", 'MM')";
482}
483
484/// summary
485/// 格式化日期的日字段
486/// /summary
487/// param name="dateField"日期字段/param
488/// returns/returns
489public override string DateParDay(string dateField)
490{
491return " TO_CHAR("+dateField+", 'DD')";
492}
493
494#endregion
495
496#region Constraint
497
498/// summary
499/// 获得数据库中所有的主键
500/// /summary
501/// returns
502/// 返回DataTable,列如下
503/// PKTable 主键表
504/// PKConstraint 主键
505/// KeyCol1 主键字段
506////returns
507public override DataTable GetPKConstraint()
508{
509string selectCommandText = @"
510select table_Name as PKTable,constraint_name as PKConstraint,'' as KeyCol1 from user_constraints where
511
512Constraint_type='P'
513";
514DbHelper helper = new DbHelper();
515return helper.ExecuteDataTable(selectCommandText);
516}
517
518/// summary
519/// 获得数据库中所有的外键
520/// /summary
521/// returns
522/// 返回DataTable,列如下
523/// PKTable 主键表
524/// FKTable 外键表
525/// FKConstraint 外键
526/// KeyCol1 主键字段
527/// RefCol1 外键字段
528////returns
529public override DataTable GetFKConstraint()
530{
531string selectCommandText = @"
532select ''as PKTable,table_Name as FKTable,constraint_name as FKConstraint,'' as KeyCol1,'' as RefCol1 from
533
534user_constraints where Constraint_type='R'
535";
536DbHelper helper = new DbHelper();
537return helper.ExecuteDataTable(selectCommandText);
538}
539
540/// summary
541/// Disable主键
542/// /summary
543/// param name="pkTableName"主键表/param
544/// param name="pkConstraint"主键/param
545public override void DisablePKConstraint(string pkTableName,string pkConstraint)
546{
547string commandText = string.Format("alter table {0} disable constraint {1}",
548pkTableName,pkConstraint);
549
550
551DbHelper helper = new DbHelper();
552helper.ExecuteNonQuery(commandText);
553}
554
555/// summary
556/// Disable外键
557/// /summary
558/// param name="fkTableName"外键表/param
559/// param name="fkConstraint"外键/param
560public override void DisableFKConstraint(string fkTableName,string fkConstraint)
561{
562string commandText = string.Format("alter table {0} disable constraint {1}",
563fkTableName,fkConstraint);
564
565
566DbHelper helper = new DbHelper();
567helper.ExecuteNonQuery(commandText);
568}
569
570/// summary
571/// Enable主键
572/// /summary
573/// param name="pkTableName"主键表/param
574/// param name="pkConstraint"主键/param
575/// param name="pkField"主键字段/param
576public override void EnablePKConstraint(string pkTableName,string pkConstraint,string pkField)
577{
578string commandText = string.Format("alter table {0} enable constraint {1}",
579pkTableName,pkConstraint);
580
581
582DbHelper helper = new DbHelper();
583helper.ExecuteNonQuery(commandText);
584}
585
586/// summary
587/// Enable外键
588/// /summary
589/// param name="fkTableName"外键表/param
590/// param name="fkConstraint"外键/param
591/// param name="fkField"外键字段/param
592/// param name="pkTableName"主键表/param
593/// param name="pkField"主键字段/param
594public override void EnableFKConstraint(string fkTableName,string fkConstraint,string fkField,string
595
596pkTableName,string pkField)
597{
598string commandText = string.Format("alter table {0} enable constraint {1}",
599fkTableName,fkConstraint);
600
601
602DbHelper helper = new DbHelper();
603helper.ExecuteNonQuery(commandText);
604}
605
606/// summary
607/// 删除主键
608/// /summary
609/// param name="pkTableName"主键表/param
610/// param name="pkConstraint"主键/param
611public override void DropPKConstraint(string pkTableName,string pkConstraint)
612{
613
614}
615
616/// summary
617/// 删除外键
618/// /summary
619/// param name="fkTableName"外键表/param
620/// param name="fkConstraint"外键/param
621public override void DropFKConstraint(string fkTableName,string fkConstraint)
622{
623
624}
625
626/// summary
627/// 增加主键
628/// /summary
629/// param name="pkTableName"主键表/param
630/// param name="pkConstraint"主键/param
631/// param name="pkField"主键字段/param
632public override void CreatePKConstraint(string pkTableName,string pkConstraint,string pkField)
633{
634
635}
636
637/// summary
638/// 增加外键
639/// /summary
640/// param name="fkTableName"外键表/param
641/// param name="fkConstraint"外键/param
642/// param name="fkField"外键字段/param
643/// param name="pkTableName"主键表/param
644/// param name="pkField"主键字段/param
645public override void CreateFKConstraint(string fkTableName,string fkConstraint,string fkField,string
646
647pkTableName,string pkField)
648{
649
650}
651#endregion
652
653#region Identity
654
655/// summary
656/// 获得下一个递增的ID。如果是ORACLE则返回下一个序列
657/// /summary
658/// param name="sName"递增的字段或序列/param
659/// returns下一个递增的ID/returns
660public override object NextIncreaseID(string seqName)
661{
662string selectCommandText = string.Format("SELECT {0}.NEXTVAL FROM DUAL", seqName);
663DbHelper helper = new DbHelper();
664return helper.ExecuteScalar(selectCommandText);
665}
666
667#endregion
668
669#region Table
670/// summary
671/// 获得数据库中所有的表
672/// /summary
673/// returns以DataTable返回表的名称/returns
674public override DataTable GetTableNames()
675{
676string selectCommandText = "SELECT TABLE_NAME FROM USER_TABLES";
677DbHelper helper = new DbHelper();
678return helper.ExecuteDataTable(selectCommandText);
679}
680
681/// summary
682/// 获得数据中表的注释
683/// /summary
684/// returns以DataTable返回表的注释/returns
685public override DataTable GetTableComments()
686{
687string selectCommandText = @"
688select table_name,comments
689from user_tab_comments
690";
691DbHelper helper = new DbHelper();
692return helper.ExecuteDataTable(selectCommandText);
693}
694
695/// summary
696/// 获得数据中表的注释
697/// /summary
698/// returns返回表的注释/returns
699public override string GetTableComments(string tableName)
700{
701string selectCommandText = @"
702select comments
703from user_tab_comments
704where table_name='{0}'
705";
706DbHelper helper = new DbHelper();
707object o = helper.ExecuteScalar(string.Format(selectCommandText,tableName));
708return o == DBNull.Value || o == null ? "" : o.ToString();
709}
710
711#endregion
712
713#region Field
714/// summary
715/// 获得指定表中的所有字段名称
716/// /summary
717/// param name="TableName"指定的表名/param
718/// returns以DataTable返回字段的名称/returns
719public override DataTable GetFieldNames(string tableName)
720{
721string selectCommandText = string.Format("SELECT COLUMN_NAME FROM USER_TAB_COLUMNS WHERE
722
723TABLE_NAME = '{0}'", tableName);
724DbHelper helper = new DbHelper();
725return helper.ExecuteDataTable(selectCommandText);
726}
727
728/// summary
729/// 获得数据中字段的注释
730/// /summary
731/// returns以DataTable返回字段的注释/returns
732public override DataTable GetFieldComments()
733{
734string selectCommandText = @"
735select table_name,column_name,
736nvl(comments ,column_name) as comments
737from user_col_comments
738";
739DbHelper helper = new DbHelper();
740return helper.ExecuteDataTable(selectCommandText);
741}
742
743/// summary
744/// 获得数据中字段的注释
745/// /summary
746/// returns以DataTable返回字段的注释/returns
747public override DataTable GetFieldComments(string tableName)
748{
749string selectCommandText = @"
750select table_name,column_name,
751nvl(comments ,column_name) as comments
752from user_col_comments
753where
754table_name = '{0}'
755";
756DbHelper helper = new DbHelper();
757return helper.ExecuteDataTable(string.Format(selectCommandText,tableName));
758}
759
760/// summary
761/// 获得数据中字段的注释
762/// /summary
763/// returns返回字段的注释/returns
764public override string GetFieldComments(string tableName,string fieldName)
765{
766string selectCommandText = @"
767select table_name,column_name,
768nvl(comments ,column_name) as comments
769from user_col_comments
770where
771table_name = '{0}' and
772column_name = '{1}'
773";
774DbHelper helper = new DbHelper();
775object o = helper.ExecuteScalar(string.Format(selectCommandText,tableName,fieldName));
776return o == DBNull.Value || o == null ? "" : o.ToString();
777
778}
779#endregion
780
781#region View
782/// summary
783/// 判断是否存在对应的视图
784/// /summary
785/// param name="viewName"视图名/param
786/// returns存在返回true,不存在返回fasle/returns
787public override bool ExistView(string viewName)
788{
789string selectCommandText = string.Format("SELECT VIEW_NAME FROM USER_VIEWS WHERE VIEW_NAME = '{0}'",
790
791viewName);
792DbHelper helper = new DbHelper();
793return helper.ExecuteScalar(selectCommandText) != null;
794}
795
796/// summary
797/// 获得数据库中所有的用户视图
798/// /summary
799/// returns以DataTable返回视图的名称/returns
800public override DataTable GetViewNames()
801{
802string selectCommandText = "SELECT VIEW_NAME as Name FROM USER_VIEWS ORDER BY VIEW_NAME";
803DbHelper helper = new DbHelper();
804return helper.ExecuteDataTable(selectCommandText);
805}
806
807/// summary
808/// 获得指定视图的内容
809/// /summary
810/// param name="viewName"视图名/param
811/// returns/returns
812public override string GetViewText(string viewName)
813{
814string selectCommandText = "SELECT Text FROM USER_VIEWS WHERE VIEW_NAME='"+viewName+"'";
815DbHelper helper = new DbHelper();
816return "create or replace view "+viewName+" as " + helper.ExecuteScalar(selectCommandText).ToString
817
818();
819}
820
821/// summary
822/// 删除数据库视图
823/// /summary
824/// param name="viewName"视图名/param
825public override void DropView(string viewName)
826{
827}
828
829/// summary
830/// 创建数据库视图
831/// /summary
832/// param name="viewName"视图名/param
833/// param name="viewText"视图内容/param
834public override void CreateView(string viewName, string viewText)
835{
836if(viewText != null && viewText.Trim() != "")
837{
838DropView(viewName);
839DbHelper helper = new DbHelper();
840helper.ExecuteNonQuery(viewText);
841}
842}
843#endregion
844
845#region Procedure
846/// summary
847/// 获得数据库中所有的用户存储过程
848/// /summary
849/// returns以DataTable返回存储过程的名称/returns
850public override DataTable GetProcedureNames()
851{
852string selectCommandText = "select object_name as Name from user_objects where
853
854object_type='PROCEDURE' order by object_name";
855DbHelper helper = new DbHelper();
856return helper.ExecuteDataTable(selectCommandText);
857}
858
859/// summary
860/// 获得指定存储过程的内容
861/// /summary
862/// param name="procedureName"存储过程名/param
863/// returns/returns
864public override string GetProcedureText(string procedureName)
865{
866string selectCommandText = string.Format(@"
867select text from USER_SOURCE where type='PROCEDURE' and name=upper('{0}')",
868procedureName);
869DbHelper helper = new DbHelper();
870DataTable table = helper.ExecuteDataTable(selectCommandText);
871string ret = "create or replace ";
872for(int i = 0; i table.Rows.Count; i++)
873{
874ret += table.Rows[i][0].ToString()+ " ";
875}
876
877return ret;
878}
879
880/// summary
881/// 删除数据库存储过程
882/// /summary
883/// param name="functionName"存储过程名/param
884public override void DropProcedure(string procedureName)
885{
886
887}
888
889
890/// summary
891/// 创建数据库存储过程
892/// /summary
893/// param name="procedureName"存储过程名/param
894/// param name="procedureText"存储过程内容/param
895public override void CreateProcedure(string procedureName, string procedureText)
896{
897
898if(procedureText != null && procedureText.Trim() != "")
899{
900DropProcedure(procedureName);
901DbHelper helper = new DbHelper();
902helper.ExecuteNonQuery(procedureText);
903}
904}
905
906#endregion
907
908#region Function
909/// summary
910/// 获得数据库中所有的用户函数
911/// /summary
912/// returns以DataTable返回函数的名称/returns
913public override DataTable GetFunctionNames()
914{
915string selectCommandText = "select object_name as Name from user_objects where object_type='FUNCTION'
916
917order by object_name";
918DbHelper helper = new DbHelper();
919return helper.ExecuteDataTable(selectCommandText);
920}
921
922/// summary
923/// 获得指定函数的内容
924/// /summary
925/// param name="functionName"函数名/param
926/// returns/returns
927public override string GetFunctionText(string functionName)
928{
929string selectCommandText = string.Format(@"
930select text from USER_SOURCE where type='FUNCTION' and name=upper('{0}')",
931functionName);
932DbHelper helper = new DbHelper();
933DataTable table = helper.ExecuteDataTable(selectCommandText);
934string ret = "create or replace ";
935for(int i = 0; i table.Rows.Count; i++)
936{
937ret += table.Rows[i][0].ToString()+ " ";
938}
939
940return ret;
941}
942
943/// summary
944/// 删除数据库函数
945/// /summary
946/// param name="functionName"函数名/param
947public override void DropFunction(string functionName)
948{
949}
950
951/// summary
952/// 创建数据库函数
953/// /summary
954/// param name="functionName"函数名/param
955/// param name="functionText"函数内容/param
956public override void CreateFunction(string functionName, string functionText)
957{
958
959if(functionText != null && functionText.Trim() != "")
960{
961DropFunction(functionName);
962DbHelper helper = new DbHelper();
963helper.ExecuteNonQuery(functionText);
964}
965}
966
967#endregion
968
969#region Trigger
970/// summary
971/// 返回数据库中所有的触发器
972/// trigger_body 内容
973/// /summary
974/// returns
975/// 返回的DataTable列
976/// TriggerName 触发器名称
977/// TableName 触发器所在表名
978/// /returns
979public override DataTable GetTriggerName()
980{
981string selectCommandText = @"
982select trigger_name as TriggerName,table_name as TableName from user_triggers
983";
984DbHelper helper = new DbHelper();
985return helper.ExecuteDataTable(selectCommandText);
986}
987
988/// summary
989/// 删除触发器
990/// /summary
991/// param name="triggerName"触发器名称/param
992public override void DropTrigger(string triggerName)
993{
994}
995
996/// summary
997/// 创建触发器
998/// /summary
999/// param name="triggerName"触发器名称/param
1000/// param name="triggerText"触发器内容/param
1001public override void CreateTrigger(string triggerName,string triggerText)
1002{
1003
1004}
1005
1006/// summary
1007/// Enable触发器
1008/// /summary
1009/// param name="triggerName"触发器名称/param
1010/// param name="tableName"触发器所在表名/param
1011public override void EnableTrigger(string triggerName,string tableName)
1012{
1013string commandText = string.Format("alter table {0} enable trigger {1}",tableName,triggerName);
1014
1015
1016DbHelper helper = new DbHelper();
1017helper.ExecuteNonQuery(commandText);
1018}
1019
1020/// summary
1021/// Disable触发器
1022/// /summary
1023/// param name="triggerName"触发器名称/param
1024/// param name="tableName"触发器所在表名/param
1025public override void DisableTrigger(string triggerName,string tableName)
1026{
1027string commandText = string.Format("alter table {0} disable trigger {1}",tableName,triggerName);
1028
1029
1030DbHelper helper = new DbHelper();
1031helper.ExecuteNonQuery(commandText);
1032}
1033
1034#endregion
1035
1036}
1037}
1038
1039
1040
1041
1042
1043程序代码:
1044using System;
1045using System.Data;
1046using System.Configuration;
1047using HZAllview.Console.Data.Common;
1048using HZAllview.Console.Utility;
1049
1050namespace HZAllview.Console.Data.SqlServer
1051{
1052/// summary
1053/// SQL Server 数据库操作的一些常用函数。
1054/// written by tmc
1055/// /summary
1056public class DbUtil : AdoUtil
1057{
1058
1059#region Construction
1060/// summary
1061/// 需要预设的构造函数,以便工厂能被创建
1062/// /summary
1063public DbUtil()
1064{
1065}
1066#endregion
1067
1068#region Format Date
1069/// summary
1070/// 格式化日期字符串
1071/// /summary
1072/// param name="dateValue"日期字符串/param
1073/// returns/returns
1074public override string FormatDateString(string dateValue)
1075{
1076if(dateValue == null || dateValue == "")
1077return "''";
1078else
1079return "'"+dateValue+"'";
1080}
1081
1082/// summary
1083/// 格式化日期的年份字段
1084/// /summary
1085/// param name="dateField"日期字段/param
1086/// returns/returns
1087public override string DatePartYear(string dateField)
1088{
1089return " DATEPART(YEAR,"+dateField+") ";
1090}
1091
1092/// summary
1093/// 格式化日期的月份字段
1094/// /summary
1095/// param name="dateField"日期字段/param
1096/// returns/returns
1097public override string DatePartMonth(string dateField)
1098{
1099return " DATEPART(MONTH,"+dateField+") ";
1100}
1101
1102/// summary
1103/// 格式化日期的日字段
1104/// /summary
1105/// param name="dateField"日期字段/param
1106/// returns/returns
1107public override string DateParDay(string dateField)
1108{
1109return " DATEPART(DAY,"+dateField+") ";
1110}
1111
1112#endregion
1113
1114#region Constraint
1115/// summary
1116/// 获得数据库中所有的主键
1117/// /summary
1118/// returns
1119/// 返回DataTable,列如下
1120/// PKTable 主键表
1121/// PKConstraint 主键
1122/// KeyCol1 主键字段
1123////returns
1124public override DataTable GetPKConstraint()
1125{
1126string selectCommandText = @"
1127select a.name as PKTable,b.name as PKConstraint,
1128index_col(a.name, c.indid, 1) as KeyCol1
1129from sysobjects a,sysobjects b,sysindexes c
1130where a.id=b.parent_obj and b.name=c.name and b.xtype='PK' order by a.name";
1131DbHelper helper = new DbHelper();
1132return helper.ExecuteDataTable(selectCommandText);
1133}
1134
1135/// summary
1136/// 获得数据库中所有的外键
1137/// /summary
1138/// returns
1139/// 返回DataTable,列如下
1140/// PKTable 主键表
1141/// FKTable 外键表
1142/// FKConstraint 外键
1143/// KeyCol1 主键字段
1144/// RefCol1 外键字段
1145////returns
1146public override DataTable GetFKConstraint()
1147{
1148string selectCommandText = @"
1149select PKT.name as PKTable,FKT.name as FKTable,
1150object_name(c.constid) as FKConstraint,
1151convert(nvarchar(132), col_name(c.rkeyid, c.rkey1)) as KeyCol1,
1152convert(nvarchar(132), col_name(c.fkeyid, c.fkey1)) as RefCol1
1153from sysobjects PKT,sysobjects FKT,sysreferences c
1154where
1155( c.rkeyid=object_id(PKT.name) or c.fkeyid = object_id(PKT.name))
1156and PKT.id = c.rkeyid and FKT.id = c.fkeyid";
1157DbHelper helper = new DbHelper();
1158return helper.ExecuteDataTable(selectCommandText);
1159}
1160
1161/// summary
1162/// Disable主键
1163/// /summary
1164/// param name="pkTableName"主键表/param
1165/// param name="pkConstraint"主键/param
1166public override void DisablePKConstraint(string pkTableName,string pkConstraint)
1167{
1168DropPKConstraint(pkTableName,pkConstraint);
1169}
1170
1171/// summary
1172/// Disable外键
1173/// /summary
1174/// param name="fkTableName"外键表/param
1175/// param name="fkConstraint"外键/param
1176public override void DisableFKConstraint(string fkTableName,string fkConstraint)
1177{
1178DropFKConstraint(fkTableName,fkConstraint);
1179}
1180
1181/// summary
1182/// Enable主键
1183/// /summary
1184/// param name="pkTableName"主键表/param
1185/// param name="pkConstraint"主键/param
1186/// param name="pkField"主键字段/param
1187public override void EnablePKConstraint(string pkTableName,string pkConstraint,string pkField)
1188{
1189CreatePKConstraint(pkTableName,pkConstraint,pkField);
1190}
1191
1192/// summary
1193/// Enable外键
1194/// /summary
1195/// param name="fkTableName"外键表/param
1196/// param name="fkConstraint"外键/param
1197/// param name="fkField"外键字段/param
1198/// param name="pkTableName"主键表/param
1199/// param name="pkField"主键字段/param
1200public override void EnableFKConstraint(string fkTableName,string fkConstraint,string fkField,string pkTableName,string pkField)
1201{
1202CreateFKConstraint(fkTableName,fkConstraint,fkField,pkTableName,pkField);
1203}
1204
1205
1206/// summary
1207/// 删除主键
1208/// /summary
1209/// param name="pkTableName"主键表/param
1210/// param name="pkConstraint"主键/param
1211public override void DropPKConstraint(string pkTableName,string pkConstraint)
1212{
1213string commandText = string.Format("ALTER TABLE [{0}] DROP CONSTRAINT {1}",
1214pkTableName,pkConstraint);
1215DbHelper helper = new DbHelper();
1216helper.ExecuteNonQuery(commandText);
1217}
1218
1219/// summary
1220/// 删除外键
1221/// /summary
1222/// param name="fkTableName"外键表/param
1223/// param name="fkConstraint"外键/param
1224public override void DropFKConstraint(string fkTableName,string fkConstraint)
1225{
1226string commandText = string.Format("ALTER TABLE [{0}] DROP CONSTRAINT {1}",
1227fkTableName,fkConstraint);
1228DbHelper helper = new DbHelper();
1229helper.ExecuteNonQuery(commandText);
1230}
1231
1232/// summary
1233/// 创建主键
1234/// /summary
1235/// param name="pkTableName"主键表/param
1236/// param name="pkConstraint"主键/param
1237/// param name="pkField"主键字段/param
1238public override void CreatePKConstraint(string pkTableName,string pkConstraint,string pkField)
1239{
1240string commandText = string.Format(@"
1241ALTER TABLE [{0}] ADD CONSTRAINT
1242{1} PRIMARY KEY CLUSTERED
1243(
1244{2}
1245) ON [PRIMARY]
1246",
1247pkTableName,
1248pkConstraint,
1249pkField);
1250
1251DbHelper helper = new DbHelper();
1252helper.ExecuteNonQuery(commandText);
1253}
1254
1255/// summary
1256/// 创建外键
1257/// /summary
1258/// param name="fkTableName"外键表/param
1259/// param name="fkConstraint"外键/param
1260/// param name="fkField"外键字段/param
1261/// param name="pkTableName"主键表/param
1262/// param name="pkField"主键字段/param
1263public override void CreateFKConstraint(string fkTableName,string fkConstraint,string fkField,string pkTableName,string pkField)
1264{
1265string commandText = string.Format(@"
1266ALTER TABLE [{0}] ADD CONSTRAINT
1267{1} FOREIGN KEY
1268(
1269{2}
1270) REFERENCES [3}
1271(
1272{4}
1273)
1274",
1275fkTableName,
1276fkConstraint,
1277fkField,
1278pkTableName,
1279pkField);
1280
1281DbHelper helper = new DbHelper();
1282helper.ExecuteNonQuery(commandText);
1283
1284}
1285#endregion
1286
1287#region Identity
1288/// summary
1289/// 允许将显式值插入表的标识列中
1290/// /summary
1291/// param name="tableName"表名/param
1292public override void SetIdentityInsertOn(string tableName)
1293{
1294AdoHelper helper = AdoHelper.Create();
1295string commandText = @"
1296if (IDENT_SEED('{0}') is not null)
1297set IDENTITY_INSERT [{0}] ON
1298";
1299helper.ExecuteNonQuery(string.Format(commandText,tableName));
1300}
1301
1302/// summary
1303/// 不允许将显式值插入表的标识列中
1304/// /summary
1305/// param name="tableName"表名/param
1306public override void SetIdentityInsertOff(string tableName)
1307{
1308AdoHelper helper = AdoHelper.Create();
1309string commandText = @"
1310if (IDENT_SEED('{0}') is not null)
1311set IDENTITY_INSERT [{0}] off
1312";
1313helper.ExecuteNonQuery(string.Format(commandText,tableName));
1314}
1315
1316/// summary
1317/// 允许将显式值插入表的标识列中
1318/// /summary
1319/// param name="tableName"表名/param
1320public override string GetIdentityInsertOn(string tableName)
1321{
1322string commandText = @"
1323if (IDENT_SEED('{0}') is not null)
1324set IDENTITY_INSERT [{0}] on
1325";
1326return string.Format(commandText,tableName);
1327}
1328
1329/// summary
1330/// 不允许将显式值插入表的标识列中
1331/// /summary
1332/// param name="tableName"表名/param
1333public override string GetIdentityInsertOff(string tableName)
1334{
1335string commandText = @"
1336if (IDENT_SEED('{0}') is not null)
1337set IDENTITY_INSERT [{0}] off
1338";
1339return string.Format(commandText,tableName);
1340}
1341
1342/// summary
1343/// SQL Server 主键自动增长
1344/// /summary
1345/// param name="sName"递增的字段或序列/param
1346/// returns下一个递增的ID/returns
1347public override object NextIncreaseID(string seqName)
1348{
1349return Guid.NewGuid().ToString();
1350}
1351
1352#endregion
1353
1354#region Table
1355/// summary
1356/// 获得数据库中所有的表
1357/// /summary
1358/// returns以DataTable返回表的名称/returns
1359public override DataTable GetTableNames()
1360{
1361string selectCommandText = "select o.name from dbo.sysobjects o where OBJECTPROPERTY(o.id, N'IsUserTable') = 1 order by o.name";
1362DbHelper helper = new DbHelper();
1363return helper.ExecuteDataTable(selectCommandText);
1364}
1365
1366/// summary
1367/// 获得数据中表的注释
1368/// /summary
1369/// returns以DataTable返回表的注释/returns
1370public override DataTable GetTableComments()
1371{
1372string selectCommandText = @"
1373select
1374s.name as table_name ,
1375p.value as comments
1376from
1377sysproperties p,
1378sysobjects s ,
1379sysusers u
1380where
1381p.id = s.id and
1382s.uid = u.uid and
1383u.name = 'dbo' and
1384p.type='3'
1385";
1386DbHelper helper = new DbHelper();
1387return helper.ExecuteDataTable(selectCommandText);
1388}
1389
1390/// summary
1391/// 获得数据中表的注释
1392/// /summary
1393/// returns返回表的注释/returns
1394public override string GetTableComments(string tableName)
1395{
1396string selectCommandText = @"
1397select
1398p.value as comments
1399from
1400sysproperties p,
1401sysobjects s ,
1402sysusers u
1403where
1404p.id = s.id and
1405s.uid = u.uid and
1406u.name = 'dbo' and
1407p.type='3' and
1408s.name='{0}'
1409";
1410DbHelper helper = new DbHelper();
1411object o = helper.ExecuteScalar(string.Format(selectCommandText,tableName));
1412return o == DBNull.Value || o == null ? "" : o.ToString();
1413}
1414
1415/// summary
1416/// 格式化表名
1417/// /summary
1418/// param name="tableName"表名/param
1419/// returns/returns
1420public override string FormatTableName(string tableName)
1421{
1422return "["+tableName+"]";
1423}
1424
1425#endregion
1426
1427#region Field
1428/// summary
1429/// 获得指定表中的所有字段名称
1430/// /summary
1431/// param name="TableName"指定的表名/param
1432/// returns以DataTable返回字段的名称/returns
1433public override DataTable GetFieldNames(string tableName)
1434{
1435string selectCommandText = string.Format("SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '{0}'", tableName);
1436DbHelper helper = new DbHelper();
1437return helper.ExecuteDataTable(selectCommandText);
1438}
1439
1440/// summary
1441/// 获得数据中字段的注释
1442/// /summary
1443/// returns以DataTable返回字段的注释/returns
1444public override DataTable GetFieldComments()
1445{
1446string selectCommandText = @"
1447select
1448s.name as table_name ,
1449c.name as column_name,
1450case
1451when p.value is null then c.name
1452when RTrim(Ltrim(cast(p.value as varchar))) = '' then c.name
1453else p.value
1454end as comments
1455from
1456sysproperties p,
1457syscolumns c ,
1458sysobjects s ,
1459sysusers u
1460where
1461p.id = c.id and
1462c.id = s.id and
1463p.smallid = c.colid and
1464s.uid = u.uid and
1465u.name = 'dbo'
1466";
1467DbHelper helper = new DbHelper();
1468return helper.ExecuteDataTable(selectCommandText);
1469}
1470
1471/// summary
1472/// 获得数据中字段的注释
1473/// /summary
1474/// returns以DataTable返回字段的注释/returns
1475public override DataTable GetFieldComments(string tableName)
1476{
1477string selectCommandText = @"
1478select
1479s.name as table_name ,
1480c.name as column_name,
1481case
1482when p.value is null then c.name
1483when RTrim(Ltrim(cast(p.value as varchar))) = '' then c.name
1484else p.value
1485end as comments
1486from
1487sysproperties p,
1488syscolumns c ,
1489sysobjects s ,
1490sysusers u
1491where
1492p.id = c.id and
1493c.id = s.id and
1494p.smallid = c.colid and
1495s.uid = u.uid and
1496u.name = 'dbo' and
1497s.name = '{0}'
1498";
1499DbHelper helper = new DbHelper();
1500return helper.ExecuteDataTable(string.Format(selectCommandText,tableName));
1501}
1502
1503/// summary
1504/// 获得数据中字段的注释
1505/// /summary
1506/// returns返回字段的注释/returns
1507public override string GetFieldComments(string tableName,string fieldName)
1508{
1509string selectCommandText = @"
1510select
1511case
1512when p.value is null then c.name
1513when RTrim(Ltrim(cast(p.value as varchar))) = '' then c.name
1514else p.value
1515end as comments
1516from
1517sysproperties p,
1518syscolumns c ,
1519sysobjects s ,
1520sysusers u
1521where
1522p.id = c.id and
1523c.id = s.id and
1524p.smallid = c.colid and
1525s.uid = u.uid and
1526u.name = 'dbo' and
1527s.name = '{0}' and
1528c.name = '{1}'
1529";
1530DbHelper helper = new DbHelper();
1531object o = helper.ExecuteScalar(string.Format(selectCommandText,tableName,fieldName));
1532return o == DBNull.Value || o == null ? "" : o.ToString();
1533
1534}
1535#endregion
1536
1537#region View
1538/// summary
1539/// 判断是否存在对应的视图
1540/// /summary
1541/// param name="viewName"视图名/param
1542/// returns存在返回true,不存在返回fasle/returns
1543public override bool ExistView(string viewName)
1544{
1545string selectCommandText = string.Format("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = '{0}'", viewName);
1546DbHelper helper = new DbHelper();
1547return helper.ExecuteScalar(selectCommandText) != null;
1548}
1549
1550/// summary
1551/// 获得数据库中所有的用户视图
1552/// /summary
1553/// returns以DataTable返回视图的名称/returns
1554public override DataTable GetViewNames()
1555{
1556string selectCommandText = "select o.name from dbo.sysobjects o where OBJECTPROPERTY(o.id, N'IsView') = 1 order by o.name";
1557DbHelper helper = new DbHelper();
1558return helper.ExecuteDataTable(selectCommandText);
1559}
1560
1561/// summary
1562/// 获得指定视图的内容(如果已经加密,则返回空)
1563/// /summary
1564/// param name="viewName"视图名/param
1565/// returns/returns
1566public override string GetViewText(string viewName)
1567{
1568string selectCommandText = "select c.text from dbo.syscomments c, dbo.sysobjects o where encrypted = 0 and o.id = c.id and c.id = object_id(N'[dbo].["+viewName+"]')";
1569DbHelper helper = new DbHelper();
1570object o = helper.ExecuteScalar(selectCommandText);
1571return o == DBNull.Value || o == null ? "" : o.ToString();
1572}
1573
1574/// summary
1575/// 删除数据库视图
1576/// /summary
1577/// param name="viewName"视图名/param
1578public override void DropView(string viewName)
1579{
1580DbHelper helper = new DbHelper();
1581helper.ExecuteNonQuery("if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].["+viewName+"]') and OBJECTPROPERTY(id, N'IsView') = 1) drop view [dbo].["+viewName+"]");
1582}
1583
1584/// summary
1585/// 创建数据库视图
1586/// /summary
1587/// param name="viewName"视图名/param
1588/// param name="viewText"视图内容/param
1589public override void CreateView(string viewName, string viewText)
1590{
1591if(viewText != null && viewText.Trim() != "")
1592{
1593DropView(viewName);
1594DbHelper helper = new DbHelper();
1595helper.ExecuteNonQuery(viewText);
1596}
1597}
1598#endregion
1599
1600#region Procedure
1601/// summary
1602/// 获得数据库中所有的用户存储过程
1603/// /summary
1604/// returns以DataTable返回存储过程的名称/returns
1605public override DataTable GetProcedureNames()
1606{
1607string selectCommandText = "select o.name from dbo.sysobjects o where OBJECTPROPERTY(o.id, N'IsProcedure') = 1 order by o.name";
1608DbHelper helper = new DbHelper();
1609return helper.ExecuteDataTable(selectCommandText);
1610}
1611
1612/// summary
1613/// 获得指定存储过程的内容
1614/// /summary
1615/// param name="procedureName"存储过程名/param
1616/// returns/returns
1617public override string GetProcedureText(string procedureName)
1618{
1619string selectCommandText = "select c.text from dbo.syscomments c, dbo.sysobjects o where encrypted = 0 and o.id = c.id and c.id = object_id(N'[dbo].["+procedureName+"]')";
1620DbHelper helper = new DbHelper();
1621object o = helper.ExecuteScalar(selectCommandText);
1622return o == DBNull.Value || o == null ? "" : o.ToString();
1623}
1624
1625/// summary
1626/// 删除数据库存储过程
1627/// /summary
1628/// param name="functionName"存储过程名/param
1629public override void DropProcedure(string procedureName)
1630{
1631DbHelper helper = new DbHelper();
1632helper.ExecuteNonQuery("if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].["+procedureName+"]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].["+procedureName+"]");
1633}
1634
1635
1636/// summary
1637/// 创建数据库存储过程
1638/// /summary
1639/// param name="procedureName"存储过程名/param
1640/// param name="procedureText"存储过程内容/param
1641public override void CreateProcedure(string procedureName, string procedureText)
1642{
1643
1644if(procedureText != null && procedureText.Trim() != "")
1645{
1646DropProcedure(procedureName);
1647DbHelper helper = new DbHelper();
1648helper.ExecuteNonQuery(procedureText);
1649}
1650}
1651
1652#endregion
1653
1654#region Function
1655/// summary
1656/// 获得数据库中所有的用户函数
1657/// /summary
1658/// returns以DataTable返回函数的名称/returns
1659public override DataTable GetFunctionNames()
1660{
1661string selectCommandText = "select o.name from dbo.sysobjects o where OBJECTPROPERTY(o.id, N'IsScalarFunction') = 1 order by o.name";
1662DbHelper helper = new DbHelper();
1663return helper.ExecuteDataTable(selectCommandText);
1664}
1665
1666/// summary
1667/// 获得指定函数的内容
1668/// /summary
1669/// param name="functionName"函数名/param
1670/// returns/returns
1671public override string GetFunctionText(string functionName)
1672{
1673string selectCommandText = "select c.text from dbo.syscomments c, dbo.sysobjects o where encrypted = 0 and o.id = c.id and c.id = object_id(N'[dbo].["+functionName+"]')";
1674DbHelper helper = new DbHelper();
1675object o = helper.ExecuteScalar(selectCommandText);
1676return o == DBNull.Value || o == null ? "" : o.ToString();
1677}
1678
1679/// summary
1680/// 删除数据库函数
1681/// /summary
1682/// param name="functionName"函数名/param
1683public override void DropFunction(string functionName)
1684{
1685DbHelper helper = new DbHelper();
1686helper.ExecuteNonQuery("if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].["+functionName+"]') and OBJECTPROPERTY(id, N'IsScalarFunction') = 1) drop function [dbo].["+functionName+"]");
1687}
1688
1689/// summary
1690/// 创建数据库函数
1691/// /summary
1692/// param name="functionName"函数名/param
1693/// param name="functionText"函数内容/param
1694public override void CreateFunction(string functionName, string functionText)
1695{
1696
1697if(functionText != null && functionText.Trim() != "")
1698{
1699DropFunction(functionName);
1700DbHelper helper = new DbHelper();
1701helper.ExecuteNonQuery(functionText);
1702}
1703}
1704#endregion
1705
1706#region Trigger
1707/// summary
1708/// 返回数据库中所有的触发器
1709/// /summary
1710/// returns
1711/// 返回的DataTable列
1712/// TriggerName 触发器名称
1713/// TableName 触发器所在表名
1714/// /returns
1715public override DataTable GetTriggerName()
1716{
1717string selectCommandText = @"
1718select object_name(a.parent_obj) as TableName,a.name as TriggerName
1719from sysobjects a,sysobjects b
1720where a.parent_obj=b.id and
1721OBJECTPROPERTY(a.id, N'IsTrigger') = 1
1722order by object_name(a.parent_obj)
1723";
1724DbHelper helper = new DbHelper();
1725return helper.ExecuteDataTable(selectCommandText);
1726}
1727
1728/// summary
1729/// 删除触发器
1730/// /summary
1731/// param name="triggerName"触发器名称/param
1732public override void DropTrigger(string triggerName)
1733{
1734DbHelper helper = new DbHelper();
1735helper.ExecuteNonQuery("if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].["+triggerName+"]') and OBJECTPROPERTY(id, N'IsTrigger') = 1) drop trigger [dbo].["+triggerName+"]");
1736}
1737
1738/// summary
1739/// 创建触发器
1740/// /summary
1741/// param name="triggerName"触发器名称/param
1742/// param name="triggerText"触发器内容/param
1743public override void CreateTrigger(string triggerName,string triggerText)
1744{
1745if(triggerText != null && triggerText.Trim() != "")
1746{
1747DbHelper helper = new DbHelper();
1748DropTrigger(triggerName);
1749helper.ExecuteNonQuery(triggerText);
1750}
1751}
1752
1753/// summary
1754/// Enable触发器
1755/// /summary
1756/// param name="triggerName"触发器名称/param
1757/// param name="tableName"触发器所在表名/param
1758public override void EnableTrigger(string triggerName,string tableName)
1759{
1760string commandText = string.Format("alter table {0} enable trigger {1}",tableName,triggerName);
1761DbHelper helper = new DbHelper();
1762helper.ExecuteNonQuery(commandText);
1763}
1764
1765/// summary
1766/// Disable触发器
1767/// /summary
1768/// param name="triggerName"触发器名称/param
1769/// param name="tableName"触发器所在表名/param
1770public override void DisableTrigger(string triggerName,string tableName)
1771{
1772string commandText = string.Format("alter table {0} disable trigger {1}",tableName,triggerName);
1773DbHelper helper = new DbHelper();
1774helper.ExecuteNonQuery(commandText);
1775}
1776
1777#endregion
1778
1779}
1780
1781}
1782
1783
2using System.Reflection;
3using System.Data;
4using System.Configuration;
5
6using HZAllview.Console.Utility;
7namespace HZAllview.Console.Data.Common
8{
9///
10/// 数据库操作的一些常用函数。
11/// written by tmc
12///
13public abstract class AdoUtil
14{
15
16#region Factory
17
18///
19/// 根据配置文件指定的数据驱动提供者,加载相应的程序集
20///
21/// DbTable对象
22public static AdoUtil Create()
23{
24//获得程序集路径
25string path = AdoConfig.AssemblyPath;
26//类名
27string className = path + ".DbUtil";
28
29//加载程序集
30Assembly assembly = Assembly.Load(path);
31
32//创建对象的实例
33object adoUtil = assembly.CreateInstance(className);
34if( adoUtil is AdoUtil )
35{
36return adoUtil as AdoUtil;
37}
38else
39{
40throw new InvalidOperationException( className +" 没有继承抽象类 HZAllview.Console.Data.Common.AdoUtil " );
41}
42
43}
44
45#endregion
46
47#region Format Date
48
49///
50/// 格式化日期字符串
51///
52/// param name="dateValue"日期字符串/param
53///
54public abstract string FormatDateString(string dateValue);
55
56///
57/// 格式化日期的年份字段
58///
59/// param name="dateField"日期字段/param
60///
61public abstract string DatePartYear(string dateField);
62
63///
64/// 格式化日期的月份字段
65///
66/// param name="dateField"日期字段/param
67///
68public abstract string DatePartMonth(string dateField);
69
70///
71/// 格式化日期的日字段
72///
73/// param name="dateField"日期字段/param
74///
75public abstract string DateParDay(string dateField);
76
77#endregion
78
79#region Constraint
80///
81/// 获得数据库中所有的主键
82///
83///
84/// 返回DataTable,列如下
85/// PKTable 主键表
86/// PKConstraint 主键
87/// KeyCol1 主键字段
88///
89public abstract DataTable GetPKConstraint();
90
91///
92/// 获得数据库中所有的外键
93///
94///
95/// 返回DataTable,列如下
96/// PKTable 主键表
97/// FKTable 外键表
98/// FKConstraint 外键
99/// KeyCol1 主键字段
100/// RefCol1 外键字段
101///
102public abstract DataTable GetFKConstraint();
103
104///
105/// Disable主键
106///
107/// param name="pkTableName"主键表/param
108/// param name="pkConstraint"主键/param
109public abstract void DisablePKConstraint(string pkTableName,string pkConstraint);
110
111///
112/// Disable外键
113///
114/// param name="fkTableName"外键表/param
115/// param name="fkConstraint"外键/param
116public abstract void DisableFKConstraint(string fkTableName,string fkConstraint);
117
118///
119/// Enable主键
120///
121/// param name="pkTableName"主键表/param
122/// param name="pkConstraint"主键/param
123/// param name="pkField"主键字段/param
124public abstract void EnablePKConstraint(string pkTableName,string pkConstraint,string pkField);
125
126///
127/// Enable外键
128///
129/// param name="fkTableName"外键表/param
130/// param name="fkConstraint"外键/param
131/// param name="fkField"外键字段/param
132/// param name="pkTableName"主键表/param
133/// param name="pkField"主键字段/param
134public abstract void EnableFKConstraint(string fkTableName,string fkConstraint,string fkField,string pkTableName,string pkField);
135
136///
137/// 删除主键
138///
139/// param name="pkTableName"主键表/param
140/// param name="pkConstraint"主键/param
141public abstract void DropPKConstraint(string pkTableName,string pkConstraint);
142
143///
144/// 删除外键
145///
146/// param name="fkTableName"外键表/param
147/// param name="fkConstraint"外键/param
148public abstract void DropFKConstraint(string fkTableName,string fkConstraint);
149
150///
151/// 创建主键
152///
153/// param name="pkTableName"主键表/param
154/// param name="pkConstraint"主键/param
155/// param name="pkField"主键字段/param
156public abstract void CreatePKConstraint(string pkTableName,string pkConstraint,string pkField);
157
158///
159/// 创建外键
160///
161/// param name="fkTableName"外键表/param
162/// param name="fkConstraint"外键/param
163/// param name="fkField"外键字段/param
164/// param name="pkTableName"主键表/param
165/// param name="pkField"主键字段/param
166public abstract void CreateFKConstraint(string fkTableName,string fkConstraint,string fkField,string pkTableName,string pkField);
167
168#endregion
169
170#region Identity
171///
172/// 允许将显式值插入表的标识列中
173///
174/// param name="tableName"表名/param
175public virtual void SetIdentityInsertOn(string tableName)
176{
177}
178
179///
180/// 不允许将显式值插入表的标识列中
181///
182/// param name="tableName"表名/param
183public virtual void SetIdentityInsertOff(string tableName)
184{
185}
186
187///
188/// 允许将显式值插入表的标识列中
189///
190/// param name="tableName"表名/param
191public virtual string GetIdentityInsertOn(string tableName)
192{
193return "";
194}
195
196///
197/// 不允许将显式值插入表的标识列中
198///
199/// param name="tableName"表名/param
200public virtual string GetIdentityInsertOff(string tableName)
201{
202return "";
203}
204
205///
206/// 获得下一个递增的ID。如果是ORACLE则返回下一个序列
207///
208/// param name="sName"递增的字段或序列/param
209/// 下一个递增的ID
210public abstract object NextIncreaseID(string seqName);
211
212#endregion
213
214#region Table
215///
216/// 获得数据库中所有的表
217///
218/// 以DataTable返回表的名称
219public abstract DataTable GetTableNames();
220
221///
222/// 获得数据中表的注释
223///
224/// 以DataTable返回表的注释
225public abstract DataTable GetTableComments();
226
227///
228/// 获得数据中表的注释
229///
230/// 返回表的注释
231public abstract string GetTableComments(string tableName);
232
233///
234/// 格式化表名
235///
236/// param name="tableName"表名/param
237///
238public virtual string FormatTableName(string tableName)
239{
240return tableName;
241}
242
243#endregion
244
245#region Field
246///
247/// 获得指定表中的所有字段名称
248///
249/// param name="TableName"指定的表名/param
250/// 以DataTable返回字段的名称
251public abstract DataTable GetFieldNames(string tableName);
252
253///
254/// 获得数据中字段的注释
255///
256/// 以DataTable返回字段的注释
257public abstract DataTable GetFieldComments();
258
259///
260/// 获得数据中字段的注释
261///
262/// 以DataTable返回字段的注释
263public abstract DataTable GetFieldComments(string tableName);
264
265///
266/// 获得数据中字段的注释
267///
268/// 返回字段的注释
269public abstract string GetFieldComments(string tableName,string fieldName);
270
271#endregion
272
273#region View
274///
275/// 判断是否存在对应的视图
276///
277/// param name="viewName"视图名/param
278/// 存在返回true,不存在返回fasle
279public abstract bool ExistView(string viewName);
280
281///
282/// 获得数据库中所有的用户视图
283///
284/// 以DataTable返回视图的名称
285public abstract DataTable GetViewNames();
286
287///
288/// 获得指定视图的内容
289///
290/// param name="viewName"视图名/param
291///
292public abstract string GetViewText(string viewName);
293
294///
295/// 删除数据库视图
296///
297/// param name="viewName"视图名/param
298public abstract void DropView(string viewName);
299
300///
301/// 创建数据库视图
302///
303/// param name="viewName"视图名/param
304/// param name="viewText"视图内容/param
305public abstract void CreateView(string viewName,string viewText);
306
307#endregion
308
309#region Procedure
310///
311/// 获得数据库中所有的用户存储过程
312///
313/// 以DataTable返回存储过程的名称
314public abstract DataTable GetProcedureNames();
315
316///
317/// 获得指定存储过程的内容
318///
319/// param name="procedureName"存储过程名/param
320///
321public abstract string GetProcedureText(string procedureName);
322
323///
324/// 删除数据库存储过程
325///
326/// param name="functionName"存储过程名/param
327public abstract void DropProcedure(string procedureName);
328
329///
330/// 创建数据库存储过程
331///
332/// param name="procedureName"存储过程名/param
333/// param name="procedureText"存储过程内容/param
334public abstract void CreateProcedure(string procedureName, string procedureText);
335
336#endregion
337
338#region Function
339///
340/// 获得数据库中所有的用户函数
341///
342/// 以DataTable返回函数的名称
343public abstract DataTable GetFunctionNames();
344
345///
346/// 获得指定函数的内容
347///
348/// param name="functionName"函数名/param
349///
350public abstract string GetFunctionText(string functionName);
351
352///
353/// 删除数据库函数
354///
355/// param name="functionName"函数名/param
356public abstract void DropFunction(string functionName);
357
358///
359/// 创建数据库函数
360///
361/// param name="functionName"函数名/param
362/// param name="functionText"函数内容/param
363public abstract void CreateFunction(string functionName, string functionText);
364
365#endregion
366
367#region Trigger
368///
369/// 返回数据库中所有的触发器
370///
371///
372/// 返回的DataTable列
373/// TriggerName 触发器名称
374/// TableName 触发器所在表名
375/// /returns
376public abstract DataTable GetTriggerName();
377
378///
379/// 删除触发器
380///
381/// param name="triggerName"触发器名称/param
382public abstract void DropTrigger(string triggerName);
383
384///
385/// 创建触发器
386///
387/// param name="triggerName"触发器名称/param
388/// param name="triggerText"触发器内容/param
389public abstract void CreateTrigger(string triggerName,string triggerText);
390
391///
392/// Enable触发器
393///
394/// param name="triggerName"触发器名称/param
395/// param name="tableName"触发器所在表名/param
396public abstract void EnableTrigger(string triggerName,string tableName);
397
398///
399/// Disable触发器
400///
401/// param name="triggerName"触发器名称/param
402/// param name="tableName"触发器所在表名/param
403public abstract void DisableTrigger(string triggerName,string tableName);
404
405#endregion
406
407}
408}
409
410
411
412
413
414程序代码:
415using System;
416using System.Data;
417using System.Data.OracleClient;
418using HZAllview.Console.Data.Common;
419
420namespace HZAllview.Console.Data.Oracle
421{
422/// summary
423/// Oracle 数据库操作的一些常用函数
424/// written by tmc
425/// /summary
426public class DbUtil : AdoUtil
427{
428
429#region Construction
430/// summary
431/// 需要预设的构造函数,以便工厂能被创建
432/// /summary
433public DbUtil()
434{
435
436}
437#endregion
438
439#region Format Date
440/// summary
441/// 格式化日期字符串
442/// /summary
443/// param name="dateValue"日期字符串/param
444/// returns/returns
445public override string FormatDateString(string dateValue)
446{
447if(dateValue == null || dateValue == "")
448return "''";
449
450dateValue = dateValue.Replace("00:00:00","").Trim(); //如果不存在"小时:分:妙",则剔除"00:00:00"
451
452//如果包含"小时:分:妙"
453if(dateValue.IndexOf(":") != -1)
454{
455return "TO_DATE('"+dateValue+"','YYYY-MM-DD HH24:MI:SS')";
456
457}
458else
459{
460return "TO_DATE('"+dateValue+"','YYYY-MM-DD')";
461}
462}
463
464/// summary
465/// 格式化日期的年份字段
466/// /summary
467/// param name="dateField"日期字段/param
468/// returns/returns
469public override string DatePartYear(string dateField)
470{
471return " TO_CHAR("+dateField+", 'YYYY')";
472}
473
474/// summary
475/// 格式化日期的月份字段
476/// /summary
477/// param name="dateField"日期字段/param
478/// returns/returns
479public override string DatePartMonth(string dateField)
480{
481return " TO_CHAR("+dateField+", 'MM')";
482}
483
484/// summary
485/// 格式化日期的日字段
486/// /summary
487/// param name="dateField"日期字段/param
488/// returns/returns
489public override string DateParDay(string dateField)
490{
491return " TO_CHAR("+dateField+", 'DD')";
492}
493
494#endregion
495
496#region Constraint
497
498/// summary
499/// 获得数据库中所有的主键
500/// /summary
501/// returns
502/// 返回DataTable,列如下
503/// PKTable 主键表
504/// PKConstraint 主键
505/// KeyCol1 主键字段
506////returns
507public override DataTable GetPKConstraint()
508{
509string selectCommandText = @"
510select table_Name as PKTable,constraint_name as PKConstraint,'' as KeyCol1 from user_constraints where
511
512Constraint_type='P'
513";
514DbHelper helper = new DbHelper();
515return helper.ExecuteDataTable(selectCommandText);
516}
517
518/// summary
519/// 获得数据库中所有的外键
520/// /summary
521/// returns
522/// 返回DataTable,列如下
523/// PKTable 主键表
524/// FKTable 外键表
525/// FKConstraint 外键
526/// KeyCol1 主键字段
527/// RefCol1 外键字段
528////returns
529public override DataTable GetFKConstraint()
530{
531string selectCommandText = @"
532select ''as PKTable,table_Name as FKTable,constraint_name as FKConstraint,'' as KeyCol1,'' as RefCol1 from
533
534user_constraints where Constraint_type='R'
535";
536DbHelper helper = new DbHelper();
537return helper.ExecuteDataTable(selectCommandText);
538}
539
540/// summary
541/// Disable主键
542/// /summary
543/// param name="pkTableName"主键表/param
544/// param name="pkConstraint"主键/param
545public override void DisablePKConstraint(string pkTableName,string pkConstraint)
546{
547string commandText = string.Format("alter table {0} disable constraint {1}",
548pkTableName,pkConstraint);
549
550
551DbHelper helper = new DbHelper();
552helper.ExecuteNonQuery(commandText);
553}
554
555/// summary
556/// Disable外键
557/// /summary
558/// param name="fkTableName"外键表/param
559/// param name="fkConstraint"外键/param
560public override void DisableFKConstraint(string fkTableName,string fkConstraint)
561{
562string commandText = string.Format("alter table {0} disable constraint {1}",
563fkTableName,fkConstraint);
564
565
566DbHelper helper = new DbHelper();
567helper.ExecuteNonQuery(commandText);
568}
569
570/// summary
571/// Enable主键
572/// /summary
573/// param name="pkTableName"主键表/param
574/// param name="pkConstraint"主键/param
575/// param name="pkField"主键字段/param
576public override void EnablePKConstraint(string pkTableName,string pkConstraint,string pkField)
577{
578string commandText = string.Format("alter table {0} enable constraint {1}",
579pkTableName,pkConstraint);
580
581
582DbHelper helper = new DbHelper();
583helper.ExecuteNonQuery(commandText);
584}
585
586/// summary
587/// Enable外键
588/// /summary
589/// param name="fkTableName"外键表/param
590/// param name="fkConstraint"外键/param
591/// param name="fkField"外键字段/param
592/// param name="pkTableName"主键表/param
593/// param name="pkField"主键字段/param
594public override void EnableFKConstraint(string fkTableName,string fkConstraint,string fkField,string
595
596pkTableName,string pkField)
597{
598string commandText = string.Format("alter table {0} enable constraint {1}",
599fkTableName,fkConstraint);
600
601
602DbHelper helper = new DbHelper();
603helper.ExecuteNonQuery(commandText);
604}
605
606/// summary
607/// 删除主键
608/// /summary
609/// param name="pkTableName"主键表/param
610/// param name="pkConstraint"主键/param
611public override void DropPKConstraint(string pkTableName,string pkConstraint)
612{
613
614}
615
616/// summary
617/// 删除外键
618/// /summary
619/// param name="fkTableName"外键表/param
620/// param name="fkConstraint"外键/param
621public override void DropFKConstraint(string fkTableName,string fkConstraint)
622{
623
624}
625
626/// summary
627/// 增加主键
628/// /summary
629/// param name="pkTableName"主键表/param
630/// param name="pkConstraint"主键/param
631/// param name="pkField"主键字段/param
632public override void CreatePKConstraint(string pkTableName,string pkConstraint,string pkField)
633{
634
635}
636
637/// summary
638/// 增加外键
639/// /summary
640/// param name="fkTableName"外键表/param
641/// param name="fkConstraint"外键/param
642/// param name="fkField"外键字段/param
643/// param name="pkTableName"主键表/param
644/// param name="pkField"主键字段/param
645public override void CreateFKConstraint(string fkTableName,string fkConstraint,string fkField,string
646
647pkTableName,string pkField)
648{
649
650}
651#endregion
652
653#region Identity
654
655/// summary
656/// 获得下一个递增的ID。如果是ORACLE则返回下一个序列
657/// /summary
658/// param name="sName"递增的字段或序列/param
659/// returns下一个递增的ID/returns
660public override object NextIncreaseID(string seqName)
661{
662string selectCommandText = string.Format("SELECT {0}.NEXTVAL FROM DUAL", seqName);
663DbHelper helper = new DbHelper();
664return helper.ExecuteScalar(selectCommandText);
665}
666
667#endregion
668
669#region Table
670/// summary
671/// 获得数据库中所有的表
672/// /summary
673/// returns以DataTable返回表的名称/returns
674public override DataTable GetTableNames()
675{
676string selectCommandText = "SELECT TABLE_NAME FROM USER_TABLES";
677DbHelper helper = new DbHelper();
678return helper.ExecuteDataTable(selectCommandText);
679}
680
681/// summary
682/// 获得数据中表的注释
683/// /summary
684/// returns以DataTable返回表的注释/returns
685public override DataTable GetTableComments()
686{
687string selectCommandText = @"
688select table_name,comments
689from user_tab_comments
690";
691DbHelper helper = new DbHelper();
692return helper.ExecuteDataTable(selectCommandText);
693}
694
695/// summary
696/// 获得数据中表的注释
697/// /summary
698/// returns返回表的注释/returns
699public override string GetTableComments(string tableName)
700{
701string selectCommandText = @"
702select comments
703from user_tab_comments
704where table_name='{0}'
705";
706DbHelper helper = new DbHelper();
707object o = helper.ExecuteScalar(string.Format(selectCommandText,tableName));
708return o == DBNull.Value || o == null ? "" : o.ToString();
709}
710
711#endregion
712
713#region Field
714/// summary
715/// 获得指定表中的所有字段名称
716/// /summary
717/// param name="TableName"指定的表名/param
718/// returns以DataTable返回字段的名称/returns
719public override DataTable GetFieldNames(string tableName)
720{
721string selectCommandText = string.Format("SELECT COLUMN_NAME FROM USER_TAB_COLUMNS WHERE
722
723TABLE_NAME = '{0}'", tableName);
724DbHelper helper = new DbHelper();
725return helper.ExecuteDataTable(selectCommandText);
726}
727
728/// summary
729/// 获得数据中字段的注释
730/// /summary
731/// returns以DataTable返回字段的注释/returns
732public override DataTable GetFieldComments()
733{
734string selectCommandText = @"
735select table_name,column_name,
736nvl(comments ,column_name) as comments
737from user_col_comments
738";
739DbHelper helper = new DbHelper();
740return helper.ExecuteDataTable(selectCommandText);
741}
742
743/// summary
744/// 获得数据中字段的注释
745/// /summary
746/// returns以DataTable返回字段的注释/returns
747public override DataTable GetFieldComments(string tableName)
748{
749string selectCommandText = @"
750select table_name,column_name,
751nvl(comments ,column_name) as comments
752from user_col_comments
753where
754table_name = '{0}'
755";
756DbHelper helper = new DbHelper();
757return helper.ExecuteDataTable(string.Format(selectCommandText,tableName));
758}
759
760/// summary
761/// 获得数据中字段的注释
762/// /summary
763/// returns返回字段的注释/returns
764public override string GetFieldComments(string tableName,string fieldName)
765{
766string selectCommandText = @"
767select table_name,column_name,
768nvl(comments ,column_name) as comments
769from user_col_comments
770where
771table_name = '{0}' and
772column_name = '{1}'
773";
774DbHelper helper = new DbHelper();
775object o = helper.ExecuteScalar(string.Format(selectCommandText,tableName,fieldName));
776return o == DBNull.Value || o == null ? "" : o.ToString();
777
778}
779#endregion
780
781#region View
782/// summary
783/// 判断是否存在对应的视图
784/// /summary
785/// param name="viewName"视图名/param
786/// returns存在返回true,不存在返回fasle/returns
787public override bool ExistView(string viewName)
788{
789string selectCommandText = string.Format("SELECT VIEW_NAME FROM USER_VIEWS WHERE VIEW_NAME = '{0}'",
790
791viewName);
792DbHelper helper = new DbHelper();
793return helper.ExecuteScalar(selectCommandText) != null;
794}
795
796/// summary
797/// 获得数据库中所有的用户视图
798/// /summary
799/// returns以DataTable返回视图的名称/returns
800public override DataTable GetViewNames()
801{
802string selectCommandText = "SELECT VIEW_NAME as Name FROM USER_VIEWS ORDER BY VIEW_NAME";
803DbHelper helper = new DbHelper();
804return helper.ExecuteDataTable(selectCommandText);
805}
806
807/// summary
808/// 获得指定视图的内容
809/// /summary
810/// param name="viewName"视图名/param
811/// returns/returns
812public override string GetViewText(string viewName)
813{
814string selectCommandText = "SELECT Text FROM USER_VIEWS WHERE VIEW_NAME='"+viewName+"'";
815DbHelper helper = new DbHelper();
816return "create or replace view "+viewName+" as " + helper.ExecuteScalar(selectCommandText).ToString
817
818();
819}
820
821/// summary
822/// 删除数据库视图
823/// /summary
824/// param name="viewName"视图名/param
825public override void DropView(string viewName)
826{
827}
828
829/// summary
830/// 创建数据库视图
831/// /summary
832/// param name="viewName"视图名/param
833/// param name="viewText"视图内容/param
834public override void CreateView(string viewName, string viewText)
835{
836if(viewText != null && viewText.Trim() != "")
837{
838DropView(viewName);
839DbHelper helper = new DbHelper();
840helper.ExecuteNonQuery(viewText);
841}
842}
843#endregion
844
845#region Procedure
846/// summary
847/// 获得数据库中所有的用户存储过程
848/// /summary
849/// returns以DataTable返回存储过程的名称/returns
850public override DataTable GetProcedureNames()
851{
852string selectCommandText = "select object_name as Name from user_objects where
853
854object_type='PROCEDURE' order by object_name";
855DbHelper helper = new DbHelper();
856return helper.ExecuteDataTable(selectCommandText);
857}
858
859/// summary
860/// 获得指定存储过程的内容
861/// /summary
862/// param name="procedureName"存储过程名/param
863/// returns/returns
864public override string GetProcedureText(string procedureName)
865{
866string selectCommandText = string.Format(@"
867select text from USER_SOURCE where type='PROCEDURE' and name=upper('{0}')",
868procedureName);
869DbHelper helper = new DbHelper();
870DataTable table = helper.ExecuteDataTable(selectCommandText);
871string ret = "create or replace ";
872for(int i = 0; i table.Rows.Count; i++)
873{
874ret += table.Rows[i][0].ToString()+ " ";
875}
876
877return ret;
878}
879
880/// summary
881/// 删除数据库存储过程
882/// /summary
883/// param name="functionName"存储过程名/param
884public override void DropProcedure(string procedureName)
885{
886
887}
888
889
890/// summary
891/// 创建数据库存储过程
892/// /summary
893/// param name="procedureName"存储过程名/param
894/// param name="procedureText"存储过程内容/param
895public override void CreateProcedure(string procedureName, string procedureText)
896{
897
898if(procedureText != null && procedureText.Trim() != "")
899{
900DropProcedure(procedureName);
901DbHelper helper = new DbHelper();
902helper.ExecuteNonQuery(procedureText);
903}
904}
905
906#endregion
907
908#region Function
909/// summary
910/// 获得数据库中所有的用户函数
911/// /summary
912/// returns以DataTable返回函数的名称/returns
913public override DataTable GetFunctionNames()
914{
915string selectCommandText = "select object_name as Name from user_objects where object_type='FUNCTION'
916
917order by object_name";
918DbHelper helper = new DbHelper();
919return helper.ExecuteDataTable(selectCommandText);
920}
921
922/// summary
923/// 获得指定函数的内容
924/// /summary
925/// param name="functionName"函数名/param
926/// returns/returns
927public override string GetFunctionText(string functionName)
928{
929string selectCommandText = string.Format(@"
930select text from USER_SOURCE where type='FUNCTION' and name=upper('{0}')",
931functionName);
932DbHelper helper = new DbHelper();
933DataTable table = helper.ExecuteDataTable(selectCommandText);
934string ret = "create or replace ";
935for(int i = 0; i table.Rows.Count; i++)
936{
937ret += table.Rows[i][0].ToString()+ " ";
938}
939
940return ret;
941}
942
943/// summary
944/// 删除数据库函数
945/// /summary
946/// param name="functionName"函数名/param
947public override void DropFunction(string functionName)
948{
949}
950
951/// summary
952/// 创建数据库函数
953/// /summary
954/// param name="functionName"函数名/param
955/// param name="functionText"函数内容/param
956public override void CreateFunction(string functionName, string functionText)
957{
958
959if(functionText != null && functionText.Trim() != "")
960{
961DropFunction(functionName);
962DbHelper helper = new DbHelper();
963helper.ExecuteNonQuery(functionText);
964}
965}
966
967#endregion
968
969#region Trigger
970/// summary
971/// 返回数据库中所有的触发器
972/// trigger_body 内容
973/// /summary
974/// returns
975/// 返回的DataTable列
976/// TriggerName 触发器名称
977/// TableName 触发器所在表名
978/// /returns
979public override DataTable GetTriggerName()
980{
981string selectCommandText = @"
982select trigger_name as TriggerName,table_name as TableName from user_triggers
983";
984DbHelper helper = new DbHelper();
985return helper.ExecuteDataTable(selectCommandText);
986}
987
988/// summary
989/// 删除触发器
990/// /summary
991/// param name="triggerName"触发器名称/param
992public override void DropTrigger(string triggerName)
993{
994}
995
996/// summary
997/// 创建触发器
998/// /summary
999/// param name="triggerName"触发器名称/param
1000/// param name="triggerText"触发器内容/param
1001public override void CreateTrigger(string triggerName,string triggerText)
1002{
1003
1004}
1005
1006/// summary
1007/// Enable触发器
1008/// /summary
1009/// param name="triggerName"触发器名称/param
1010/// param name="tableName"触发器所在表名/param
1011public override void EnableTrigger(string triggerName,string tableName)
1012{
1013string commandText = string.Format("alter table {0} enable trigger {1}",tableName,triggerName);
1014
1015
1016DbHelper helper = new DbHelper();
1017helper.ExecuteNonQuery(commandText);
1018}
1019
1020/// summary
1021/// Disable触发器
1022/// /summary
1023/// param name="triggerName"触发器名称/param
1024/// param name="tableName"触发器所在表名/param
1025public override void DisableTrigger(string triggerName,string tableName)
1026{
1027string commandText = string.Format("alter table {0} disable trigger {1}",tableName,triggerName);
1028
1029
1030DbHelper helper = new DbHelper();
1031helper.ExecuteNonQuery(commandText);
1032}
1033
1034#endregion
1035
1036}
1037}
1038
1039
1040
1041
1042
1043程序代码:
1044using System;
1045using System.Data;
1046using System.Configuration;
1047using HZAllview.Console.Data.Common;
1048using HZAllview.Console.Utility;
1049
1050namespace HZAllview.Console.Data.SqlServer
1051{
1052/// summary
1053/// SQL Server 数据库操作的一些常用函数。
1054/// written by tmc
1055/// /summary
1056public class DbUtil : AdoUtil
1057{
1058
1059#region Construction
1060/// summary
1061/// 需要预设的构造函数,以便工厂能被创建
1062/// /summary
1063public DbUtil()
1064{
1065}
1066#endregion
1067
1068#region Format Date
1069/// summary
1070/// 格式化日期字符串
1071/// /summary
1072/// param name="dateValue"日期字符串/param
1073/// returns/returns
1074public override string FormatDateString(string dateValue)
1075{
1076if(dateValue == null || dateValue == "")
1077return "''";
1078else
1079return "'"+dateValue+"'";
1080}
1081
1082/// summary
1083/// 格式化日期的年份字段
1084/// /summary
1085/// param name="dateField"日期字段/param
1086/// returns/returns
1087public override string DatePartYear(string dateField)
1088{
1089return " DATEPART(YEAR,"+dateField+") ";
1090}
1091
1092/// summary
1093/// 格式化日期的月份字段
1094/// /summary
1095/// param name="dateField"日期字段/param
1096/// returns/returns
1097public override string DatePartMonth(string dateField)
1098{
1099return " DATEPART(MONTH,"+dateField+") ";
1100}
1101
1102/// summary
1103/// 格式化日期的日字段
1104/// /summary
1105/// param name="dateField"日期字段/param
1106/// returns/returns
1107public override string DateParDay(string dateField)
1108{
1109return " DATEPART(DAY,"+dateField+") ";
1110}
1111
1112#endregion
1113
1114#region Constraint
1115/// summary
1116/// 获得数据库中所有的主键
1117/// /summary
1118/// returns
1119/// 返回DataTable,列如下
1120/// PKTable 主键表
1121/// PKConstraint 主键
1122/// KeyCol1 主键字段
1123////returns
1124public override DataTable GetPKConstraint()
1125{
1126string selectCommandText = @"
1127select a.name as PKTable,b.name as PKConstraint,
1128index_col(a.name, c.indid, 1) as KeyCol1
1129from sysobjects a,sysobjects b,sysindexes c
1130where a.id=b.parent_obj and b.name=c.name and b.xtype='PK' order by a.name";
1131DbHelper helper = new DbHelper();
1132return helper.ExecuteDataTable(selectCommandText);
1133}
1134
1135/// summary
1136/// 获得数据库中所有的外键
1137/// /summary
1138/// returns
1139/// 返回DataTable,列如下
1140/// PKTable 主键表
1141/// FKTable 外键表
1142/// FKConstraint 外键
1143/// KeyCol1 主键字段
1144/// RefCol1 外键字段
1145////returns
1146public override DataTable GetFKConstraint()
1147{
1148string selectCommandText = @"
1149select PKT.name as PKTable,FKT.name as FKTable,
1150object_name(c.constid) as FKConstraint,
1151convert(nvarchar(132), col_name(c.rkeyid, c.rkey1)) as KeyCol1,
1152convert(nvarchar(132), col_name(c.fkeyid, c.fkey1)) as RefCol1
1153from sysobjects PKT,sysobjects FKT,sysreferences c
1154where
1155( c.rkeyid=object_id(PKT.name) or c.fkeyid = object_id(PKT.name))
1156and PKT.id = c.rkeyid and FKT.id = c.fkeyid";
1157DbHelper helper = new DbHelper();
1158return helper.ExecuteDataTable(selectCommandText);
1159}
1160
1161/// summary
1162/// Disable主键
1163/// /summary
1164/// param name="pkTableName"主键表/param
1165/// param name="pkConstraint"主键/param
1166public override void DisablePKConstraint(string pkTableName,string pkConstraint)
1167{
1168DropPKConstraint(pkTableName,pkConstraint);
1169}
1170
1171/// summary
1172/// Disable外键
1173/// /summary
1174/// param name="fkTableName"外键表/param
1175/// param name="fkConstraint"外键/param
1176public override void DisableFKConstraint(string fkTableName,string fkConstraint)
1177{
1178DropFKConstraint(fkTableName,fkConstraint);
1179}
1180
1181/// summary
1182/// Enable主键
1183/// /summary
1184/// param name="pkTableName"主键表/param
1185/// param name="pkConstraint"主键/param
1186/// param name="pkField"主键字段/param
1187public override void EnablePKConstraint(string pkTableName,string pkConstraint,string pkField)
1188{
1189CreatePKConstraint(pkTableName,pkConstraint,pkField);
1190}
1191
1192/// summary
1193/// Enable外键
1194/// /summary
1195/// param name="fkTableName"外键表/param
1196/// param name="fkConstraint"外键/param
1197/// param name="fkField"外键字段/param
1198/// param name="pkTableName"主键表/param
1199/// param name="pkField"主键字段/param
1200public override void EnableFKConstraint(string fkTableName,string fkConstraint,string fkField,string pkTableName,string pkField)
1201{
1202CreateFKConstraint(fkTableName,fkConstraint,fkField,pkTableName,pkField);
1203}
1204
1205
1206/// summary
1207/// 删除主键
1208/// /summary
1209/// param name="pkTableName"主键表/param
1210/// param name="pkConstraint"主键/param
1211public override void DropPKConstraint(string pkTableName,string pkConstraint)
1212{
1213string commandText = string.Format("ALTER TABLE [{0}] DROP CONSTRAINT {1}",
1214pkTableName,pkConstraint);
1215DbHelper helper = new DbHelper();
1216helper.ExecuteNonQuery(commandText);
1217}
1218
1219/// summary
1220/// 删除外键
1221/// /summary
1222/// param name="fkTableName"外键表/param
1223/// param name="fkConstraint"外键/param
1224public override void DropFKConstraint(string fkTableName,string fkConstraint)
1225{
1226string commandText = string.Format("ALTER TABLE [{0}] DROP CONSTRAINT {1}",
1227fkTableName,fkConstraint);
1228DbHelper helper = new DbHelper();
1229helper.ExecuteNonQuery(commandText);
1230}
1231
1232/// summary
1233/// 创建主键
1234/// /summary
1235/// param name="pkTableName"主键表/param
1236/// param name="pkConstraint"主键/param
1237/// param name="pkField"主键字段/param
1238public override void CreatePKConstraint(string pkTableName,string pkConstraint,string pkField)
1239{
1240string commandText = string.Format(@"
1241ALTER TABLE [{0}] ADD CONSTRAINT
1242{1} PRIMARY KEY CLUSTERED
1243(
1244{2}
1245) ON [PRIMARY]
1246",
1247pkTableName,
1248pkConstraint,
1249pkField);
1250
1251DbHelper helper = new DbHelper();
1252helper.ExecuteNonQuery(commandText);
1253}
1254
1255/// summary
1256/// 创建外键
1257/// /summary
1258/// param name="fkTableName"外键表/param
1259/// param name="fkConstraint"外键/param
1260/// param name="fkField"外键字段/param
1261/// param name="pkTableName"主键表/param
1262/// param name="pkField"主键字段/param
1263public override void CreateFKConstraint(string fkTableName,string fkConstraint,string fkField,string pkTableName,string pkField)
1264{
1265string commandText = string.Format(@"
1266ALTER TABLE [{0}] ADD CONSTRAINT
1267{1} FOREIGN KEY
1268(
1269{2}
1270) REFERENCES [3}
1271(
1272{4}
1273)
1274",
1275fkTableName,
1276fkConstraint,
1277fkField,
1278pkTableName,
1279pkField);
1280
1281DbHelper helper = new DbHelper();
1282helper.ExecuteNonQuery(commandText);
1283
1284}
1285#endregion
1286
1287#region Identity
1288/// summary
1289/// 允许将显式值插入表的标识列中
1290/// /summary
1291/// param name="tableName"表名/param
1292public override void SetIdentityInsertOn(string tableName)
1293{
1294AdoHelper helper = AdoHelper.Create();
1295string commandText = @"
1296if (IDENT_SEED('{0}') is not null)
1297set IDENTITY_INSERT [{0}] ON
1298";
1299helper.ExecuteNonQuery(string.Format(commandText,tableName));
1300}
1301
1302/// summary
1303/// 不允许将显式值插入表的标识列中
1304/// /summary
1305/// param name="tableName"表名/param
1306public override void SetIdentityInsertOff(string tableName)
1307{
1308AdoHelper helper = AdoHelper.Create();
1309string commandText = @"
1310if (IDENT_SEED('{0}') is not null)
1311set IDENTITY_INSERT [{0}] off
1312";
1313helper.ExecuteNonQuery(string.Format(commandText,tableName));
1314}
1315
1316/// summary
1317/// 允许将显式值插入表的标识列中
1318/// /summary
1319/// param name="tableName"表名/param
1320public override string GetIdentityInsertOn(string tableName)
1321{
1322string commandText = @"
1323if (IDENT_SEED('{0}') is not null)
1324set IDENTITY_INSERT [{0}] on
1325";
1326return string.Format(commandText,tableName);
1327}
1328
1329/// summary
1330/// 不允许将显式值插入表的标识列中
1331/// /summary
1332/// param name="tableName"表名/param
1333public override string GetIdentityInsertOff(string tableName)
1334{
1335string commandText = @"
1336if (IDENT_SEED('{0}') is not null)
1337set IDENTITY_INSERT [{0}] off
1338";
1339return string.Format(commandText,tableName);
1340}
1341
1342/// summary
1343/// SQL Server 主键自动增长
1344/// /summary
1345/// param name="sName"递增的字段或序列/param
1346/// returns下一个递增的ID/returns
1347public override object NextIncreaseID(string seqName)
1348{
1349return Guid.NewGuid().ToString();
1350}
1351
1352#endregion
1353
1354#region Table
1355/// summary
1356/// 获得数据库中所有的表
1357/// /summary
1358/// returns以DataTable返回表的名称/returns
1359public override DataTable GetTableNames()
1360{
1361string selectCommandText = "select o.name from dbo.sysobjects o where OBJECTPROPERTY(o.id, N'IsUserTable') = 1 order by o.name";
1362DbHelper helper = new DbHelper();
1363return helper.ExecuteDataTable(selectCommandText);
1364}
1365
1366/// summary
1367/// 获得数据中表的注释
1368/// /summary
1369/// returns以DataTable返回表的注释/returns
1370public override DataTable GetTableComments()
1371{
1372string selectCommandText = @"
1373select
1374s.name as table_name ,
1375p.value as comments
1376from
1377sysproperties p,
1378sysobjects s ,
1379sysusers u
1380where
1381p.id = s.id and
1382s.uid = u.uid and
1383u.name = 'dbo' and
1384p.type='3'
1385";
1386DbHelper helper = new DbHelper();
1387return helper.ExecuteDataTable(selectCommandText);
1388}
1389
1390/// summary
1391/// 获得数据中表的注释
1392/// /summary
1393/// returns返回表的注释/returns
1394public override string GetTableComments(string tableName)
1395{
1396string selectCommandText = @"
1397select
1398p.value as comments
1399from
1400sysproperties p,
1401sysobjects s ,
1402sysusers u
1403where
1404p.id = s.id and
1405s.uid = u.uid and
1406u.name = 'dbo' and
1407p.type='3' and
1408s.name='{0}'
1409";
1410DbHelper helper = new DbHelper();
1411object o = helper.ExecuteScalar(string.Format(selectCommandText,tableName));
1412return o == DBNull.Value || o == null ? "" : o.ToString();
1413}
1414
1415/// summary
1416/// 格式化表名
1417/// /summary
1418/// param name="tableName"表名/param
1419/// returns/returns
1420public override string FormatTableName(string tableName)
1421{
1422return "["+tableName+"]";
1423}
1424
1425#endregion
1426
1427#region Field
1428/// summary
1429/// 获得指定表中的所有字段名称
1430/// /summary
1431/// param name="TableName"指定的表名/param
1432/// returns以DataTable返回字段的名称/returns
1433public override DataTable GetFieldNames(string tableName)
1434{
1435string selectCommandText = string.Format("SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '{0}'", tableName);
1436DbHelper helper = new DbHelper();
1437return helper.ExecuteDataTable(selectCommandText);
1438}
1439
1440/// summary
1441/// 获得数据中字段的注释
1442/// /summary
1443/// returns以DataTable返回字段的注释/returns
1444public override DataTable GetFieldComments()
1445{
1446string selectCommandText = @"
1447select
1448s.name as table_name ,
1449c.name as column_name,
1450case
1451when p.value is null then c.name
1452when RTrim(Ltrim(cast(p.value as varchar))) = '' then c.name
1453else p.value
1454end as comments
1455from
1456sysproperties p,
1457syscolumns c ,
1458sysobjects s ,
1459sysusers u
1460where
1461p.id = c.id and
1462c.id = s.id and
1463p.smallid = c.colid and
1464s.uid = u.uid and
1465u.name = 'dbo'
1466";
1467DbHelper helper = new DbHelper();
1468return helper.ExecuteDataTable(selectCommandText);
1469}
1470
1471/// summary
1472/// 获得数据中字段的注释
1473/// /summary
1474/// returns以DataTable返回字段的注释/returns
1475public override DataTable GetFieldComments(string tableName)
1476{
1477string selectCommandText = @"
1478select
1479s.name as table_name ,
1480c.name as column_name,
1481case
1482when p.value is null then c.name
1483when RTrim(Ltrim(cast(p.value as varchar))) = '' then c.name
1484else p.value
1485end as comments
1486from
1487sysproperties p,
1488syscolumns c ,
1489sysobjects s ,
1490sysusers u
1491where
1492p.id = c.id and
1493c.id = s.id and
1494p.smallid = c.colid and
1495s.uid = u.uid and
1496u.name = 'dbo' and
1497s.name = '{0}'
1498";
1499DbHelper helper = new DbHelper();
1500return helper.ExecuteDataTable(string.Format(selectCommandText,tableName));
1501}
1502
1503/// summary
1504/// 获得数据中字段的注释
1505/// /summary
1506/// returns返回字段的注释/returns
1507public override string GetFieldComments(string tableName,string fieldName)
1508{
1509string selectCommandText = @"
1510select
1511case
1512when p.value is null then c.name
1513when RTrim(Ltrim(cast(p.value as varchar))) = '' then c.name
1514else p.value
1515end as comments
1516from
1517sysproperties p,
1518syscolumns c ,
1519sysobjects s ,
1520sysusers u
1521where
1522p.id = c.id and
1523c.id = s.id and
1524p.smallid = c.colid and
1525s.uid = u.uid and
1526u.name = 'dbo' and
1527s.name = '{0}' and
1528c.name = '{1}'
1529";
1530DbHelper helper = new DbHelper();
1531object o = helper.ExecuteScalar(string.Format(selectCommandText,tableName,fieldName));
1532return o == DBNull.Value || o == null ? "" : o.ToString();
1533
1534}
1535#endregion
1536
1537#region View
1538/// summary
1539/// 判断是否存在对应的视图
1540/// /summary
1541/// param name="viewName"视图名/param
1542/// returns存在返回true,不存在返回fasle/returns
1543public override bool ExistView(string viewName)
1544{
1545string selectCommandText = string.Format("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = '{0}'", viewName);
1546DbHelper helper = new DbHelper();
1547return helper.ExecuteScalar(selectCommandText) != null;
1548}
1549
1550/// summary
1551/// 获得数据库中所有的用户视图
1552/// /summary
1553/// returns以DataTable返回视图的名称/returns
1554public override DataTable GetViewNames()
1555{
1556string selectCommandText = "select o.name from dbo.sysobjects o where OBJECTPROPERTY(o.id, N'IsView') = 1 order by o.name";
1557DbHelper helper = new DbHelper();
1558return helper.ExecuteDataTable(selectCommandText);
1559}
1560
1561/// summary
1562/// 获得指定视图的内容(如果已经加密,则返回空)
1563/// /summary
1564/// param name="viewName"视图名/param
1565/// returns/returns
1566public override string GetViewText(string viewName)
1567{
1568string selectCommandText = "select c.text from dbo.syscomments c, dbo.sysobjects o where encrypted = 0 and o.id = c.id and c.id = object_id(N'[dbo].["+viewName+"]')";
1569DbHelper helper = new DbHelper();
1570object o = helper.ExecuteScalar(selectCommandText);
1571return o == DBNull.Value || o == null ? "" : o.ToString();
1572}
1573
1574/// summary
1575/// 删除数据库视图
1576/// /summary
1577/// param name="viewName"视图名/param
1578public override void DropView(string viewName)
1579{
1580DbHelper helper = new DbHelper();
1581helper.ExecuteNonQuery("if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].["+viewName+"]') and OBJECTPROPERTY(id, N'IsView') = 1) drop view [dbo].["+viewName+"]");
1582}
1583
1584/// summary
1585/// 创建数据库视图
1586/// /summary
1587/// param name="viewName"视图名/param
1588/// param name="viewText"视图内容/param
1589public override void CreateView(string viewName, string viewText)
1590{
1591if(viewText != null && viewText.Trim() != "")
1592{
1593DropView(viewName);
1594DbHelper helper = new DbHelper();
1595helper.ExecuteNonQuery(viewText);
1596}
1597}
1598#endregion
1599
1600#region Procedure
1601/// summary
1602/// 获得数据库中所有的用户存储过程
1603/// /summary
1604/// returns以DataTable返回存储过程的名称/returns
1605public override DataTable GetProcedureNames()
1606{
1607string selectCommandText = "select o.name from dbo.sysobjects o where OBJECTPROPERTY(o.id, N'IsProcedure') = 1 order by o.name";
1608DbHelper helper = new DbHelper();
1609return helper.ExecuteDataTable(selectCommandText);
1610}
1611
1612/// summary
1613/// 获得指定存储过程的内容
1614/// /summary
1615/// param name="procedureName"存储过程名/param
1616/// returns/returns
1617public override string GetProcedureText(string procedureName)
1618{
1619string selectCommandText = "select c.text from dbo.syscomments c, dbo.sysobjects o where encrypted = 0 and o.id = c.id and c.id = object_id(N'[dbo].["+procedureName+"]')";
1620DbHelper helper = new DbHelper();
1621object o = helper.ExecuteScalar(selectCommandText);
1622return o == DBNull.Value || o == null ? "" : o.ToString();
1623}
1624
1625/// summary
1626/// 删除数据库存储过程
1627/// /summary
1628/// param name="functionName"存储过程名/param
1629public override void DropProcedure(string procedureName)
1630{
1631DbHelper helper = new DbHelper();
1632helper.ExecuteNonQuery("if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].["+procedureName+"]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].["+procedureName+"]");
1633}
1634
1635
1636/// summary
1637/// 创建数据库存储过程
1638/// /summary
1639/// param name="procedureName"存储过程名/param
1640/// param name="procedureText"存储过程内容/param
1641public override void CreateProcedure(string procedureName, string procedureText)
1642{
1643
1644if(procedureText != null && procedureText.Trim() != "")
1645{
1646DropProcedure(procedureName);
1647DbHelper helper = new DbHelper();
1648helper.ExecuteNonQuery(procedureText);
1649}
1650}
1651
1652#endregion
1653
1654#region Function
1655/// summary
1656/// 获得数据库中所有的用户函数
1657/// /summary
1658/// returns以DataTable返回函数的名称/returns
1659public override DataTable GetFunctionNames()
1660{
1661string selectCommandText = "select o.name from dbo.sysobjects o where OBJECTPROPERTY(o.id, N'IsScalarFunction') = 1 order by o.name";
1662DbHelper helper = new DbHelper();
1663return helper.ExecuteDataTable(selectCommandText);
1664}
1665
1666/// summary
1667/// 获得指定函数的内容
1668/// /summary
1669/// param name="functionName"函数名/param
1670/// returns/returns
1671public override string GetFunctionText(string functionName)
1672{
1673string selectCommandText = "select c.text from dbo.syscomments c, dbo.sysobjects o where encrypted = 0 and o.id = c.id and c.id = object_id(N'[dbo].["+functionName+"]')";
1674DbHelper helper = new DbHelper();
1675object o = helper.ExecuteScalar(selectCommandText);
1676return o == DBNull.Value || o == null ? "" : o.ToString();
1677}
1678
1679/// summary
1680/// 删除数据库函数
1681/// /summary
1682/// param name="functionName"函数名/param
1683public override void DropFunction(string functionName)
1684{
1685DbHelper helper = new DbHelper();
1686helper.ExecuteNonQuery("if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].["+functionName+"]') and OBJECTPROPERTY(id, N'IsScalarFunction') = 1) drop function [dbo].["+functionName+"]");
1687}
1688
1689/// summary
1690/// 创建数据库函数
1691/// /summary
1692/// param name="functionName"函数名/param
1693/// param name="functionText"函数内容/param
1694public override void CreateFunction(string functionName, string functionText)
1695{
1696
1697if(functionText != null && functionText.Trim() != "")
1698{
1699DropFunction(functionName);
1700DbHelper helper = new DbHelper();
1701helper.ExecuteNonQuery(functionText);
1702}
1703}
1704#endregion
1705
1706#region Trigger
1707/// summary
1708/// 返回数据库中所有的触发器
1709/// /summary
1710/// returns
1711/// 返回的DataTable列
1712/// TriggerName 触发器名称
1713/// TableName 触发器所在表名
1714/// /returns
1715public override DataTable GetTriggerName()
1716{
1717string selectCommandText = @"
1718select object_name(a.parent_obj) as TableName,a.name as TriggerName
1719from sysobjects a,sysobjects b
1720where a.parent_obj=b.id and
1721OBJECTPROPERTY(a.id, N'IsTrigger') = 1
1722order by object_name(a.parent_obj)
1723";
1724DbHelper helper = new DbHelper();
1725return helper.ExecuteDataTable(selectCommandText);
1726}
1727
1728/// summary
1729/// 删除触发器
1730/// /summary
1731/// param name="triggerName"触发器名称/param
1732public override void DropTrigger(string triggerName)
1733{
1734DbHelper helper = new DbHelper();
1735helper.ExecuteNonQuery("if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].["+triggerName+"]') and OBJECTPROPERTY(id, N'IsTrigger') = 1) drop trigger [dbo].["+triggerName+"]");
1736}
1737
1738/// summary
1739/// 创建触发器
1740/// /summary
1741/// param name="triggerName"触发器名称/param
1742/// param name="triggerText"触发器内容/param
1743public override void CreateTrigger(string triggerName,string triggerText)
1744{
1745if(triggerText != null && triggerText.Trim() != "")
1746{
1747DbHelper helper = new DbHelper();
1748DropTrigger(triggerName);
1749helper.ExecuteNonQuery(triggerText);
1750}
1751}
1752
1753/// summary
1754/// Enable触发器
1755/// /summary
1756/// param name="triggerName"触发器名称/param
1757/// param name="tableName"触发器所在表名/param
1758public override void EnableTrigger(string triggerName,string tableName)
1759{
1760string commandText = string.Format("alter table {0} enable trigger {1}",tableName,triggerName);
1761DbHelper helper = new DbHelper();
1762helper.ExecuteNonQuery(commandText);
1763}
1764
1765/// summary
1766/// Disable触发器
1767/// /summary
1768/// param name="triggerName"触发器名称/param
1769/// param name="tableName"触发器所在表名/param
1770public override void DisableTrigger(string triggerName,string tableName)
1771{
1772string commandText = string.Format("alter table {0} disable trigger {1}",tableName,triggerName);
1773DbHelper helper = new DbHelper();
1774helper.ExecuteNonQuery(commandText);
1775}
1776
1777#endregion
1778
1779}
1780
1781}
1782
1783