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

简介: 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)、函数名称、出错的时间,写到一个文本文件里面。对于查错是很方便的。存储过程的话帮助不是很大,因为存储过程的出错描述总是让人很晕,记录下来帮助也不是很大。




相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
2月前
mvc.net分页查询案例——DLL数据访问层(HouseDLL.cs)
mvc.net分页查询案例——DLL数据访问层(HouseDLL.cs)
9 0
|
8月前
|
IDE API 开发工具
拦截|篡改|伪造.NET类库中不限于public的类和方法
本文除了回顾拦截.NET类库中的方法,实现方法参数的篡改、方法返回结果的伪造,再着重介绍.NET类库中非public类及方法如何拦截。
拦截|篡改|伪造.NET类库中不限于public的类和方法
|
24天前
|
存储 测试技术 计算机视觉
高维数据惩罚回归方法:主成分回归PCR、岭回归、lasso、弹性网络elastic net分析基因数据
高维数据惩罚回归方法:主成分回归PCR、岭回归、lasso、弹性网络elastic net分析基因数据
|
2月前
|
SQL 数据库
使用ADO.NET查询和操作数据
使用ADO.NET查询和操作数据
12 0
|
3月前
|
SQL 开发框架 .NET
ASP.NET WEB+EntityFramework数据持久化——考核练习库——1、用户管理系统(考点:查询列表、增加、删除)
ASP.NET WEB+EntityFramework数据持久化——考核练习库——1、用户管理系统(考点:查询列表、增加、删除)
72 0
|
5月前
|
Oracle 关系型数据库 数据管理
.NET医院检验系统LIS源码,使用了oracle数据库,保证数据的隔离和安全性
LIS系统实现了实验室人力资源管理、标本管理、日常事务管理、网络管理、检验数据管理(采集、传输、处理、输出、发布)、报表管理过程的自动化,使实验室的操作人员和管理者从繁杂的手工劳作中解放出来,提高了检验人员的工作效率和效益,降低了劳动成本和差错发生率。
|
7月前
|
前端开发 JavaScript
.net core 前端传递参数有值 后端接收到的数据却是null
1、问题分析 在做接口测试时,偶然出现了前端输出有值,但是后端断点调试时却出现接收参数总是为null的情况 2、解决办法 前端打印log,看前端的每一个传值的数据类型,与后端请求参数类进行认真的一一比对 小技巧: ① 直接打印调用接口的传参值的数据类型,例如 console.log(type of this.form.name) --string console.log(type of this.form.age) --number 打印的数据类型与后端接口的参数类比对,查出不对应的类型 ② 关于非必填的值,默认传值可能出现空字符串(' ')、NaN值(Not a Number
114 0
|
8月前
|
JSON 数据格式
.NET Core - 配置绑定:使用强类型对象承载配置数据
.NET Core - 配置绑定:使用强类型对象承载配置数据
|
10月前
|
数据库 C#
C#,.net,winform导入Excel功能以及下载Excel文件到本地,并使用SqlBulkCopy把DataTable类型的数据写入到sqlserver数据库中
C#,.net,winform导入Excel功能以及下载Excel文件到本地,并使用SqlBulkCopy把DataTable类型的数据写入到sqlserver数据库中
231 0
|
11月前
|
SQL 网络安全
外网访问接口,报net::ERR_CONNECTION_REST错误。
外网访问接口,报net::ERR_CONNECTION_REST错误。
162 0