我的数据访问类(第二版)—— for .net2.0 (一)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: asp.net2.0已经出来好久了,由于许多的原因一直没有使用,一个月前才开始使用VS2005写东西。这一个月里又重新学习了一下基础知识,比如多态、接口了什么的。既然已经到了2.0了嘛,那么以前的数据访问的方式要不要变一下呢?简单看了一下,感觉还是我的那种方式好,至少时我已经用习惯了。
asp.net2.0已经出来好久了,由于许多的原因一直没有使用,一个月前才开始使用VS2005写东西。

这一个月里又重新学习了一下基础知识,比如多态、接口了什么的。

既然已经到了2.0了嘛,那么以前的数据访问的方式要不要变一下呢?简单看了一下,感觉还是我的那种方式好,至少时我已经用习惯了。那么用.net2.0的方法重写一遍吧。

看了一下Framework 2.0的代码,发现一个问题。虽然表面上ADO.NET的使用没有什么变化(加了一些功能,原来由的功能没有变),但是内部实现有比较大的变化,原来的接口的“工作”都改成了抽象基类。

正好可以利用这个特性来改一下支持多数据库的部分。

数据访问类分成了两个DLL,共 3+3个部分。

本着把变化提出来的思想,我把变化的地方编译成一个DLL,相对不变的地方编译成另一个DLL。

变化的地方又分为三个部分:读取web.config里的信息,基类,写错误日志。

不变的地方分为三个部分:SQL语句部分(静态函数),存储过程部分(需要实例化),填充实体类部分。

下面是容易变化的DLL代码:

img_1c53668bcee393edac0d7b3b3daff1ae.gif img_405b18b4b6584ae338e0f6ecaf736533.gif 读取Webconfig文件
 1img_a6339ee3e57d1d52bc7d02b338e15a60.gifusing System;
 2img_a6339ee3e57d1d52bc7d02b338e15a60.gifusing System.Web.Configuration;
 3img_a6339ee3e57d1d52bc7d02b338e15a60.gif
 4img_a6339ee3e57d1d52bc7d02b338e15a60.gifnamespace JYK.DataAccessLibrary
 5img_405b18b4b6584ae338e0f6ecaf736533.gifimg_1c53668bcee393edac0d7b3b3daff1ae.gifimg_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
 6img_33d02437d135341f0800e3d415312ae8.gif    public class WebConfig
 7img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif    img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
 8img_33d02437d135341f0800e3d415312ae8.gif
 9img_33d02437d135341f0800e3d415312ae8.gif        public static readonly string ConnectionString = System.Web.Configuration.WebConfigurationManager.AppSettings["ConnString"];
10img_33d02437d135341f0800e3d415312ae8.gif
11img_7a2b9a960ee9a98bfd25d306d55009f8.gifimg_2887d91d0594ef8793c1db92b8a1d545.gif        读取webconfig里的连接字符串并返回#region 读取webconfig里的连接字符串并返回
12img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        /**//// <summary>
13img_33d02437d135341f0800e3d415312ae8.gif        /// 返回连接字符串
14img_33d02437d135341f0800e3d415312ae8.gif        /// </summary>
15img_105a1e124122b2abcee4ea8e9f5108f3.gif        /// <returns></returns>

16img_33d02437d135341f0800e3d415312ae8.gif        //public static string ConnectionString()
17img_33d02437d135341f0800e3d415312ae8.gif        //{
18img_33d02437d135341f0800e3d415312ae8.gif        //    return System.Web.Configuration.WebConfigurationManager.AppSettings["ConnString"];
19img_33d02437d135341f0800e3d415312ae8.gif        //}
20img_105a1e124122b2abcee4ea8e9f5108f3.gif        #endregion

21img_33d02437d135341f0800e3d415312ae8.gif
22img_7a2b9a960ee9a98bfd25d306d55009f8.gifimg_2887d91d0594ef8793c1db92b8a1d545.gif        读取webconfig里的数据库类型的信息并返回#region 读取webconfig里的数据库类型的信息并返回
23img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        /**//// <summary>
24img_33d02437d135341f0800e3d415312ae8.gif        /// 返回数据库类型
25img_33d02437d135341f0800e3d415312ae8.gif        /// 1:SQL 2000 SQL2005
26img_33d02437d135341f0800e3d415312ae8.gif        /// 2:Orcale
27img_33d02437d135341f0800e3d415312ae8.gif        /// 3:OleDb
28img_33d02437d135341f0800e3d415312ae8.gif        /// 4:ODBC
29img_33d02437d135341f0800e3d415312ae8.gif        /// </summary>
30img_105a1e124122b2abcee4ea8e9f5108f3.gif        /// <returns></returns>

31img_33d02437d135341f0800e3d415312ae8.gif        public static int DataBaseType()
32img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
33img_33d02437d135341f0800e3d415312ae8.gif            string show = System.Web.Configuration.WebConfigurationManager.AppSettings["DataBaseType"];
34img_33d02437d135341f0800e3d415312ae8.gif            if (show == null)
35img_33d02437d135341f0800e3d415312ae8.gif                return 1;
36img_33d02437d135341f0800e3d415312ae8.gif            else
37img_33d02437d135341f0800e3d415312ae8.gif               return Int32.Parse(show);
38img_33d02437d135341f0800e3d415312ae8.gif             
39img_105a1e124122b2abcee4ea8e9f5108f3.gif        }

40img_105a1e124122b2abcee4ea8e9f5108f3.gif        #endregion

41img_33d02437d135341f0800e3d415312ae8.gif
42img_7a2b9a960ee9a98bfd25d306d55009f8.gifimg_2887d91d0594ef8793c1db92b8a1d545.gif        读取webconfig里的是否显示出错信息并返回#region 读取webconfig里的是否显示出错信息并返回
43img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        /**//// <summary>
44img_33d02437d135341f0800e3d415312ae8.gif        /// 返回是否显示出错的SQL语句
45img_33d02437d135341f0800e3d415312ae8.gif        /// </summary>
46img_105a1e124122b2abcee4ea8e9f5108f3.gif        /// <returns></returns>

47img_33d02437d135341f0800e3d415312ae8.gif        public static bool isShowErrorSQL()
48img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
49img_33d02437d135341f0800e3d415312ae8.gif            string show = System.Web.Configuration.WebConfigurationManager.AppSettings["isShowErrorSQL"];
50img_33d02437d135341f0800e3d415312ae8.gif            if (show == null)
51img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif            img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
52img_33d02437d135341f0800e3d415312ae8.gif                return false;
53img_105a1e124122b2abcee4ea8e9f5108f3.gif            }

54img_33d02437d135341f0800e3d415312ae8.gif            else
55img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif            img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
56img_33d02437d135341f0800e3d415312ae8.gif                if (show == "0")
57img_33d02437d135341f0800e3d415312ae8.gif                    return false;
58img_33d02437d135341f0800e3d415312ae8.gif                else
59img_33d02437d135341f0800e3d415312ae8.gif                    return true;
60img_105a1e124122b2abcee4ea8e9f5108f3.gif            }

61img_33d02437d135341f0800e3d415312ae8.gif
62img_105a1e124122b2abcee4ea8e9f5108f3.gif        }

63img_105a1e124122b2abcee4ea8e9f5108f3.gif        #endregion

64img_33d02437d135341f0800e3d415312ae8.gif
65img_105a1e124122b2abcee4ea8e9f5108f3.gif    }

66img_05dd8d549cff04457a6366b0a7c9352a.gif}

着里的处理并不是太好,只是还没有想到更好的方法。

主要是读取连接字符串和数据库类型。

==================================================

简单工厂,根据数据库类型返回实例对应的实例。

  1 img_a6339ee3e57d1d52bc7d02b338e15a60.gif sing System;
  2 img_a6339ee3e57d1d52bc7d02b338e15a60.gif using  System.Collections.Generic;
  3 img_a6339ee3e57d1d52bc7d02b338e15a60.gif using  System.Text;
  4 img_a6339ee3e57d1d52bc7d02b338e15a60.gif using  System.Data;
  5 img_a6339ee3e57d1d52bc7d02b338e15a60.gif using  System.Data.Common;
  6 img_a6339ee3e57d1d52bc7d02b338e15a60.gif using  JYK;
  7 img_a6339ee3e57d1d52bc7d02b338e15a60.gif
  8 img_a6339ee3e57d1d52bc7d02b338e15a60.gif namespace  JYK.DataAccessLibrary
  9 img_405b18b4b6584ae338e0f6ecaf736533.gifimg_1c53668bcee393edac0d7b3b3daff1ae.gif img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif {
 10img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif    /**//// <summary>
 11img_33d02437d135341f0800e3d415312ae8.gif    /// 返回Connection、Command、DataAdapter
 12img_105a1e124122b2abcee4ea8e9f5108f3.gif    /// </summary>

 13img_33d02437d135341f0800e3d415312ae8.gif    public class Factory
 14img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif    img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
 15img_33d02437d135341f0800e3d415312ae8.gif
 16img_33d02437d135341f0800e3d415312ae8.gif        public static string DataBaseType = WebConfig.DataBaseType();
 17img_7a2b9a960ee9a98bfd25d306d55009f8.gifimg_2887d91d0594ef8793c1db92b8a1d545.gif        Connection#region Connection
 18img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        /**//// <summary>
 19img_33d02437d135341f0800e3d415312ae8.gif        /// 根据webconfig返回一个Connection的实例。
 20img_33d02437d135341f0800e3d415312ae8.gif        /// </summary>
 21img_105a1e124122b2abcee4ea8e9f5108f3.gif        /// <returns></returns>

 22img_33d02437d135341f0800e3d415312ae8.gif        public static DbConnection CreateConnection()
 23img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
 24img_33d02437d135341f0800e3d415312ae8.gif            return CreateConnection(DataBaseType);
 25img_105a1e124122b2abcee4ea8e9f5108f3.gif        }

 26img_33d02437d135341f0800e3d415312ae8.gif
 27img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        /**//// <summary>
 28img_33d02437d135341f0800e3d415312ae8.gif        /// 返回一个Connection的实例
 29img_33d02437d135341f0800e3d415312ae8.gif        /// </summary>
 30img_105a1e124122b2abcee4ea8e9f5108f3.gif        /// <returns></returns>

 31img_33d02437d135341f0800e3d415312ae8.gif        public static DbConnection CreateConnection(int DataBaseType)
 32img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
 33img_33d02437d135341f0800e3d415312ae8.gif            switch (DataBaseType)
 34img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif            img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
 35img_33d02437d135341f0800e3d415312ae8.gif                default:
 36img_33d02437d135341f0800e3d415312ae8.gif                    return new System.Data.SqlClient.SqlConnection(WebConfig.ConnectionString);
 37img_33d02437d135341f0800e3d415312ae8.gif               // case 2:
 38img_33d02437d135341f0800e3d415312ae8.gif               //     return new ;
 39img_33d02437d135341f0800e3d415312ae8.gif                case 3:
 40img_33d02437d135341f0800e3d415312ae8.gif                    return new System.Data.OleDb.OleDbConnection(WebConfig.ConnectionString);
 41img_33d02437d135341f0800e3d415312ae8.gif                case 4:
 42img_33d02437d135341f0800e3d415312ae8.gif                    return new System.Data.Odbc.OdbcConnection(WebConfig.ConnectionString);
 43img_105a1e124122b2abcee4ea8e9f5108f3.gif            }

 44img_33d02437d135341f0800e3d415312ae8.gif
 45img_105a1e124122b2abcee4ea8e9f5108f3.gif        }

 46img_105a1e124122b2abcee4ea8e9f5108f3.gif        #endregion

 47img_33d02437d135341f0800e3d415312ae8.gif
 48img_7a2b9a960ee9a98bfd25d306d55009f8.gifimg_2887d91d0594ef8793c1db92b8a1d545.gif        Command#region Command
 49img_33d02437d135341f0800e3d415312ae8.gif        public static DbCommand CreateCommand()
 50img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
 51img_33d02437d135341f0800e3d415312ae8.gif            return CreateCommand(DataBaseType, "");
 52img_105a1e124122b2abcee4ea8e9f5108f3.gif        }

 53img_33d02437d135341f0800e3d415312ae8.gif
 54img_33d02437d135341f0800e3d415312ae8.gif        public static DbCommand CreateCommand(int DataBaseType)
 55img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
 56img_33d02437d135341f0800e3d415312ae8.gif            return CreateCommand(DataBaseType, "");
 57img_105a1e124122b2abcee4ea8e9f5108f3.gif        }

 58img_33d02437d135341f0800e3d415312ae8.gif
 59img_33d02437d135341f0800e3d415312ae8.gif        public static DbCommand CreateCommand(string sql)
 60img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
 61img_33d02437d135341f0800e3d415312ae8.gif            return CreateCommand(DataBaseType, sql);
 62img_105a1e124122b2abcee4ea8e9f5108f3.gif        }

 63img_33d02437d135341f0800e3d415312ae8.gif
 64img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        /**//// <summary>
 65img_33d02437d135341f0800e3d415312ae8.gif        /// 返回Command实例,并且设置Connection和CommandText
 66img_33d02437d135341f0800e3d415312ae8.gif        /// </summary>
 67img_33d02437d135341f0800e3d415312ae8.gif        /// <param name="DataBaseType"></param>
 68img_33d02437d135341f0800e3d415312ae8.gif        /// <param name="sql"></param>
 69img_105a1e124122b2abcee4ea8e9f5108f3.gif        /// <returns></returns>

 70img_33d02437d135341f0800e3d415312ae8.gif        public static DbCommand CreateCommand(int DataBaseType, string sql)
 71img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
 72img_33d02437d135341f0800e3d415312ae8.gif            DbCommand cm = null;
 73img_33d02437d135341f0800e3d415312ae8.gif            cm = new System.Data.SqlClient.SqlCommand(sql, (System.Data.SqlClient.SqlConnection)CreateConnection());
 74img_33d02437d135341f0800e3d415312ae8.gif            return cm;
 75img_105a1e124122b2abcee4ea8e9f5108f3.gif        }

 76img_105a1e124122b2abcee4ea8e9f5108f3.gif        #endregion

 77img_33d02437d135341f0800e3d415312ae8.gif
 78img_7a2b9a960ee9a98bfd25d306d55009f8.gifimg_2887d91d0594ef8793c1db92b8a1d545.gif        DataAdapter#region DataAdapter
 79img_33d02437d135341f0800e3d415312ae8.gif        public static DbDataAdapter CreateDataAdapter()
 80img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
 81img_33d02437d135341f0800e3d415312ae8.gif            return CreateDataAdapter(DataBaseType, "");
 82img_105a1e124122b2abcee4ea8e9f5108f3.gif        }

 83img_33d02437d135341f0800e3d415312ae8.gif
 84img_33d02437d135341f0800e3d415312ae8.gif        public static DbDataAdapter CreateDataAdapter(string sql)
 85img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
 86img_33d02437d135341f0800e3d415312ae8.gif            return CreateDataAdapter(DataBaseType, sql);
 87img_105a1e124122b2abcee4ea8e9f5108f3.gif        }

 88img_33d02437d135341f0800e3d415312ae8.gif
 89img_33d02437d135341f0800e3d415312ae8.gif        public static DbDataAdapter CreateDataAdapter(int DataBaseType)
 90img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
 91img_33d02437d135341f0800e3d415312ae8.gif            return CreateDataAdapter(DataBaseType, "");
 92img_105a1e124122b2abcee4ea8e9f5108f3.gif        }

 93img_33d02437d135341f0800e3d415312ae8.gif
 94img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        /**//// <summary>
 95img_33d02437d135341f0800e3d415312ae8.gif        /// 返回DataAdapter的实例,并且设置SelectCommand和CommandText
 96img_33d02437d135341f0800e3d415312ae8.gif        /// </summary>
 97img_33d02437d135341f0800e3d415312ae8.gif        /// <param name="DataBaseType">数据库类型</param>
 98img_33d02437d135341f0800e3d415312ae8.gif        /// <param name="sql">SQL语句</param>
 99img_105a1e124122b2abcee4ea8e9f5108f3.gif        /// <returns></returns>

100img_33d02437d135341f0800e3d415312ae8.gif        public static DbDataAdapter CreateDataAdapter(int DataBaseType,string sql)
101img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
102img_33d02437d135341f0800e3d415312ae8.gif            DbDataAdapter da = null;
103img_33d02437d135341f0800e3d415312ae8.gif            da = new System.Data.SqlClient.SqlDataAdapter();
104img_33d02437d135341f0800e3d415312ae8.gif            da.SelectCommand = CreateCommand(DataBaseType,sql);
105img_33d02437d135341f0800e3d415312ae8.gif            return da;
106img_105a1e124122b2abcee4ea8e9f5108f3.gif        }

107img_33d02437d135341f0800e3d415312ae8.gif
108img_33d02437d135341f0800e3d415312ae8.gif        public static void DbDataAdapterDispose(DbDataAdapter da)
109img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
110img_33d02437d135341f0800e3d415312ae8.gif            da.SelectCommand.Connection.Close();
111img_33d02437d135341f0800e3d415312ae8.gif            da.SelectCommand.Connection.Dispose();
112img_33d02437d135341f0800e3d415312ae8.gif            da.SelectCommand.Dispose();
113img_33d02437d135341f0800e3d415312ae8.gif            da.Dispose();
114img_105a1e124122b2abcee4ea8e9f5108f3.gif        }

115img_105a1e124122b2abcee4ea8e9f5108f3.gif        #endregion

116img_33d02437d135341f0800e3d415312ae8.gif      
117img_105a1e124122b2abcee4ea8e9f5108f3.gif    }

118img_05dd8d549cff04457a6366b0a7c9352a.gif}

119 img_a6339ee3e57d1d52bc7d02b338e15a60.gif

一、利用了System.Data.Common; 里面的一些基类。

System.Data.Common.DbProviderFactory 还没有研究,好像可以利用它来实现,去掉switch。

但是我觉得数据访问的地方是比较特殊的,

1、数据库的种类是有限的,常用的也就三个(对于.net来说):MS SQL 、Orcale 、Access(属于OleDb),算上不常用的应该超不过十种,全都算上也超不过30种吧。

2、变化慢,出现一种新的数据库要多长时间呢?好长好长吧。

3、运行效率高,访问数据库是很频繁的事情,应该尽量提高运行效率,去掉不必要的地方。

综上所述,我感觉switch更好一点。两外为什么说这里是容易变化的地方呢?因为这里可以做很多的变化。

a、比如说我只用MS SQL,不可能用到其它的数据库,那么我可以把 简化 CreateConnection() 函数,去掉判断的部分,直接返回 SqlConnection()。这样可以提高一点效率。

b、比如我只在MS SQL和 Orcale 之间切换,那么我可以只写两个判断,呵呵,以后再加数据库,再加一条判断就可以了。因为数据库的变换是很慢的,所以改动程序也没有什么麻烦的。


二、这里的处理也不是太好,至少缩小了使用范围,这么写的目的主要是让调用的地方减少点代码。两外也是按照我的习惯来写的。

======================================

记录出错信息的代码

 1 img_a6339ee3e57d1d52bc7d02b338e15a60.gif using  System;
 2 img_a6339ee3e57d1d52bc7d02b338e15a60.gif using  System.Collections.Generic;
 3 img_a6339ee3e57d1d52bc7d02b338e15a60.gif using  System.Text;
 4 img_a6339ee3e57d1d52bc7d02b338e15a60.gif
 5 img_a6339ee3e57d1d52bc7d02b338e15a60.gif namespace  JYK.DataAccessLibrary
 6 img_405b18b4b6584ae338e0f6ecaf736533.gifimg_1c53668bcee393edac0d7b3b3daff1ae.gif img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif {
 7img_33d02437d135341f0800e3d415312ae8.gif    public class WriteLog
 8img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif    img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
 9img_7a2b9a960ee9a98bfd25d306d55009f8.gifimg_2887d91d0594ef8793c1db92b8a1d545.gif        设置出错信息#region 设置出错信息
10img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        /**//// <summary>
11img_33d02437d135341f0800e3d415312ae8.gif        /// 当发生异常时,所作的处理
12img_33d02437d135341f0800e3d415312ae8.gif        /// </summary>
13img_33d02437d135341f0800e3d415312ae8.gif        /// <param name="FunctionName">函数名称</param>
14img_33d02437d135341f0800e3d415312ae8.gif        /// <param name="commandText">查询语句或者存储过程</param>
15img_105a1e124122b2abcee4ea8e9f5108f3.gif        /// <param name="message">错误信息</param>

16img_33d02437d135341f0800e3d415312ae8.gif        public static string SetErrorMsg(string FunctionName, string commandText, string message)
17img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
18img_33d02437d135341f0800e3d415312ae8.gif            //设置返回到上一层的错误信息
19img_33d02437d135341f0800e3d415312ae8.gif            string errorMsg = FunctionName + "函数出现错误。<BR>错误信息:" + message;
20img_33d02437d135341f0800e3d415312ae8.gif            if (WebConfig.isShowErrorSQL())
21img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif            img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
22img_33d02437d135341f0800e3d415312ae8.gif                errorMsg += "<BR>查询语句:" + commandText;
23img_33d02437d135341f0800e3d415312ae8.gif                addLogErr(commandText, errorMsg);    //记录到错误日志
24img_105a1e124122b2abcee4ea8e9f5108f3.gif            }

25img_33d02437d135341f0800e3d415312ae8.gif            else
26img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif            img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
27img_33d02437d135341f0800e3d415312ae8.gif                addLogErr(commandText, errorMsg + "<BR>查询语句:" + commandText);    //记录到错误日志
28img_105a1e124122b2abcee4ea8e9f5108f3.gif            }

29img_33d02437d135341f0800e3d415312ae8.gif            return errorMsg;
30img_33d02437d135341f0800e3d415312ae8.gif
31img_105a1e124122b2abcee4ea8e9f5108f3.gif        }

32img_105a1e124122b2abcee4ea8e9f5108f3.gif        #endregion

33img_33d02437d135341f0800e3d415312ae8.gif
34img_7a2b9a960ee9a98bfd25d306d55009f8.gifimg_2887d91d0594ef8793c1db92b8a1d545.gif        记录错误日志#region 记录错误日志
35img_33d02437d135341f0800e3d415312ae8.gif        //如果要使用的话,根据你的需要进行修改。
36img_33d02437d135341f0800e3d415312ae8.gif        public static void addLogErr(string SPName, string ErrDescribe)
37img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
38img_33d02437d135341f0800e3d415312ae8.gif            //记录到错误日志
39img_33d02437d135341f0800e3d415312ae8.gif            string FilePath = System.Web.HttpContext.Current.Server.MapPath("/log/" + DateTime.Now.ToString("yyyyMMdd"+ ".txt");
40img_33d02437d135341f0800e3d415312ae8.gif            System.Text.StringBuilder str = new System.Text.StringBuilder();
41img_33d02437d135341f0800e3d415312ae8.gif            str.Append(DateTime.Now.ToString());
42img_33d02437d135341f0800e3d415312ae8.gif            str.Append("\t");
43img_33d02437d135341f0800e3d415312ae8.gif            str.Append(SPName);
44img_33d02437d135341f0800e3d415312ae8.gif            str.Append("\t");
45img_33d02437d135341f0800e3d415312ae8.gif            str.Append(ErrDescribe.Replace("<BR>"""));
46img_33d02437d135341f0800e3d415312ae8.gif            str.Append("\r\n");
47img_33d02437d135341f0800e3d415312ae8.gif
48img_33d02437d135341f0800e3d415312ae8.gif            System.IO.StreamWriter sw = null;
49img_33d02437d135341f0800e3d415312ae8.gif            try
50img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif            img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
51img_33d02437d135341f0800e3d415312ae8.gif                sw = new System.IO.StreamWriter(FilePath, true, System.Text.Encoding.Unicode);
52img_33d02437d135341f0800e3d415312ae8.gif                sw.Write(str.ToString());
53img_105a1e124122b2abcee4ea8e9f5108f3.gif            }

54img_33d02437d135341f0800e3d415312ae8.gif            catch (Exception ex)
55img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif            img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
56img_33d02437d135341f0800e3d415312ae8.gif                System.Web.HttpContext.Current.Response.Write("没有访问日志文件的权限!或日志文件只读!<BR>" + ex.Message);
57img_105a1e124122b2abcee4ea8e9f5108f3.gif            }

58img_33d02437d135341f0800e3d415312ae8.gif            finally
59img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif            img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
60img_33d02437d135341f0800e3d415312ae8.gif                if (sw != null)
61img_33d02437d135341f0800e3d415312ae8.gif                    sw.Close();
62img_105a1e124122b2abcee4ea8e9f5108f3.gif            }

63img_105a1e124122b2abcee4ea8e9f5108f3.gif        }

64img_105a1e124122b2abcee4ea8e9f5108f3.gif        #endregion

65img_105a1e124122b2abcee4ea8e9f5108f3.gif    }

66img_05dd8d549cff04457a6366b0a7c9352a.gif}

67 img_a6339ee3e57d1d52bc7d02b338e15a60.gif

这个对于经常在程序里面使用SQL语句的兄弟们是很实用的,因为它会把出错的SQL语句、出错的描述(ex.Message)、函数名称、出错的时间,写到一个文本文件里面。对于查错是很方便的。存储过程的话帮助不是很大,因为存储过程的出错描述总是让人很晕,记录下来帮助也不是很大。




相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
开发框架 .NET C#
C#|.net core 基础 - 删除字符串最后一个字符的七大类N种实现方式
【10月更文挑战第9天】在 C#/.NET Core 中,有多种方法可以删除字符串的最后一个字符,包括使用 `Substring` 方法、`Remove` 方法、`ToCharArray` 与 `Array.Copy`、`StringBuilder`、正则表达式、循环遍历字符数组以及使用 LINQ 的 `SkipLast` 方法。
404 8
|
8月前
|
网络协议 定位技术 网络安全
IPIP.NET-IP地理位置数据
IPIP.NET 是一家专注于 IP 地理位置数据的提供商,基于 BGP/ASN 数据与全球 800+ 网络监测点技术,提供高精度的 IPv4 和 IPv6 定位服务。其核心服务包括地理位置查询、详细地理信息和网络工具等,广泛应用于网络安全、广告营销、CDN 优化等领域。数据覆盖全球,支持多语言,每日更新确保实时性。IPIP.NET 提供 API 接口、离线数据库及多种语言 SDK,方便开发者集成使用。
1381 0
|
12月前
|
JSON 安全 API
.net 自定义日志类
在.NET中,创建自定义日志类有助于更好地管理日志信息。示例展示了如何创建、配置和使用日志记录功能,包括写入日志文件、设置日志级别、格式化消息等。注意事项涵盖时间戳、日志级别、JSON序列化、线程安全、日志格式、文件处理及示例使用。请根据需求调整代码。
189 13
|
12月前
|
JSON 数据格式
.net HTTP请求类封装
`HttpRequestHelper` 是一个用于简化 HTTP 请求的辅助类,支持发送 GET 和 POST 请求。它使用 `HttpClient` 发起请求,并通过 `Newtonsoft.Json` 处理 JSON 数据。示例展示了如何使用该类发送请求并处理响应。注意事项包括:简单的错误处理、需安装 `Newtonsoft.Json` 依赖,以及建议重用 `HttpClient` 实例以优化性能。
303 2
|
SQL XML 关系型数据库
入门指南:利用NHibernate简化.NET应用程序的数据访问
【10月更文挑战第13天】NHibernate是一个面向.NET的开源对象关系映射(ORM)工具,它提供了从数据库表到应用程序中的对象之间的映射。通过使用NHibernate,开发者可以专注于业务逻辑和领域模型的设计,而无需直接编写复杂的SQL语句来处理数据持久化问题。NHibernate支持多种数据库,并且具有高度的灵活性和可扩展性。
313 2
|
SQL 存储 关系型数据库
C#一分钟浅谈:使用 ADO.NET 进行数据库访问
【9月更文挑战第3天】在.NET开发中,与数据库交互至关重要。ADO.NET是Microsoft提供的用于访问关系型数据库的类库,包含连接数据库、执行SQL命令等功能。本文从基础入手,介绍如何使用ADO.NET进行数据库访问,并提供示例代码,同时讨论常见问题及其解决方案,如连接字符串错误、SQL注入风险和资源泄露等,帮助开发者更好地利用ADO.NET提升应用的安全性和稳定性。
713 6
.NET 4.0下实现.NET4.5的Task类相似功能组件
【10月更文挑战第29天】在.NET 4.0 环境下,可以使用 `BackgroundWorker` 类来实现类似于 .NET 4.5 中 `Task` 类的功能。`BackgroundWorker` 允许在后台执行耗时操作,同时不会阻塞用户界面线程,并支持进度报告和取消操作。尽管它有一些局限性,如复杂的事件处理模型和不灵活的任务管理方式,但在某些情况下仍能有效替代 `Task` 类。
184 0
【Azure Key Vault】.NET 代码如何访问中国区的Key Vault中的机密信息(Get/Set Secret)
【Azure Key Vault】.NET 代码如何访问中国区的Key Vault中的机密信息(Get/Set Secret)
130 3
|
算法 Java 测试技术
java 访问ingress https报错javax.net.ssl.SSLHandshakeException: Received fatal alert: protocol_version
java 访问ingress https报错javax.net.ssl.SSLHandshakeException: Received fatal alert: protocol_version
2009 1