• uoLib .Net 项目基础类库 基于C#, 可用于.Net Framework 2.0/3.5, 免费下载使用


    最新程序发布页面:http://work.udnz.com/uolib/

    在线帮助文档:http://work.udnz.com/uolib/SDK/

    CHM帮助文档:http://work.udnz.com/uolib/SDK/uoLib.chm

    这个类库中包含了大量 .NET 程序所需的基础类,特别是数据库操作类、异常捕获类,已在多个企业级项目中使用。

    使用uoLib将使您在项目开发更加快捷方便:

    1. 提供运行时错误的输出、日志记录功能。[强烈推荐]

    发现问题是解决问题的一半。系统提供了专用于捕获运行时异常的类,可以将这些运行时异常深入地捕获并输出出来。输出格式可以是.txt文本文件、.htm网页文件形式的日志,也可以直接在B/S项目运行时的页面上直接显示出来。

    这里有一个异常捕获的日志列表,先感性认识下:http://www.udnz.com/Errors/list.aspx

    这个异常捕获类可以深度挖掘出异常链。环境对比:

    • .NET自带的异常显示页面(就是黄色的那个错误页面)只能显示一个异常,经常也只是浅表异常,无法深层次地挖掘出异常产生的实质原因。特别是在多层结构、多项目结构的解决方案中,系统自带的异常显示页面往往仅输出一个类似“引发类型为‘System.Web.HttpUnhandledException’的异常。”这样的信息,让人摸不着头脑。另一方面,当项目发布之后,仍然可能存在诸多不易发现但确实存在的Bug,而这些Bug所引发的异常在客户端显示时,您并不会获得这些异常发生的状况信息,导致您很难发现这些Bug的存在。
    • 若使用uoLib的异常捕获类,可以深入地将引发异常的所有InnerException捕获并输出出来,无论多么深的异常都将被递归地捕获。系统还提供一个专用的HttpHandlers来显示这些异常捕获的日志,使您能不间断地跟踪项目运行的情况。您只需要在web.Config里设置一个httpHandlers配置节就可以毫无遗漏地获得最原始的项目异常资料。这些资料包括异常发生的时间、请求路径、请求参数、客户端浏览器、客户端IP等详细信息。为项目的健壮性提高提供坚实的基础。

    2. 将数据库实例化为对象,高性能地适配各种数据库。

    系统提供了Database这个类,您可以使用它来建立自己的数据库实例。它提供了大量常用的方法来进行数据库操作:您只需要传入一个DbCommand甚至是一条SQL语句即可直接执行它,或者得到一个包含数据集的DataSet。在此过程中,您无需在意数据库连接是否已打开,也无需烦恼什么时候数据库连接需要关闭,系统已经为您做好了一切事情。

    系统也以单件模式提供了若干单体数据库实例,使您的数据库操作更高效。在您的项目中,只会一次性地链接数据库,一次性生成唯一的数据库实例,大大提升项目的开发速度和执行效率。而这些数据库单体实例在使用起来有特别方便,如您需要连接Sql Server数据库,只需要在web.config里面配置好链接字符串就可以在项目的任何地方使用SqlClientSqlServer.Instance了,没错,只有一行代码!

    系统也提供了数据库类的基本超类和接口,您也可以在此基础上继承、组合以添加您自己的功能。

    在提供多数据库支持的系统中更有完美的发挥。环境对比:

    • 一般工厂模式架构的项目中,除为各个数据库写各自的数据层之外,都会有一个接口层介于数据层和业务层之间,代码比较复杂不易管理。
    • 但若用uoLib的实例化数据库对象,您只需写您需要的数据层即可,多个数据层和业务层能够完美匹配,无需再写接口层代码您的项目也能够很方便地在各种数据库之间切换。

    目前支持的数据库有:

    • SQL Server 2000/2005/2008.
    • Access 97/2000/2007
    • Excel 97/2000/2007
    • SQLite
    • DSN (系统数据源、用户数据源、文件数据源)
    • Oracle (未能实际测试)

    3. 提供一系列的常用静态方法。

    这些方法可以在保证项目稳定运行的情况下加快您项目开发的速度,使您的工作更高效.

    异常捕获类使用示例

    此功能是uoLib提供的特色功能,也是最推荐使用的功能。使用起来非常方便,在项目中引用uoLib之后只需要配置Global.asax即可。

    protected void Application_Error(object sender, EventArgs e)    
    {    
        
    if (HttpContext.Current.AllErrors.Length > 0)    
        {    
            
    foreach (Exception ex in HttpContext.Current.AllErrors)    
            {    
                uoLib.Web.Debugger.ErrorReporter.RecordErrors(ex);    
            }    
            HttpContext.Current.ApplicationInstance.CompleteRequest();    
        }    
     

    这样设置之后,项目中一旦产生了运行时异常将自动被以日志形式记录下来。默认的日志类型是.htm文件,记录在~/Errors/目录下(需要有写入权限),您也可以通过配置uoLib.Web.Debugger.Configuration来设置日志类型、存储路径,甚至关闭此功能。

    如果您希望能以Web页面的形式访问到系统记录的异常日志,只需要配置web.config中httpHandlers一节即可:

    Code
    <?xml version="1.0" encoding="utf-8"?>    
    <configuration>    
        
    <system.web>    
            
    <httpHandlers>  
                
    <add verb="*" path="Errors/List.aspx" type="uoLib.Web.HttpHandlers.ServerErrorList,uoLib"/>    
            
    </httpHandlers>    
        
    </system.web>    
    </configuration> 

    其中“Errors/List.aspx”可以是您希望的任意路径,不必存在这个.aspx文件。 

    数据库单体使用示例

    uoLib类库在使用上极其方便。它为三种常用数据库类型分别提供了一个数据库单体实例,它们是:

    • oledb连接的Access:OleDbAccess
    • SqlClient连接的SQL Server:SqlClientSqlServer
    • odbc连接的SQLite:OdbcSQLite

    您可以在程序中直接使用这三个单体实例来访问相应的数据库。下面是示例代码:

    web.Config

    <?xml version="1.0"?>    
    <configuration>    
        
    <connectionStrings>    
            
    <remove name="*"/>    
            
    <add name="uoLib.SqlClientSqlServer" connectionString="Data Source=127.0.0.1;Initial Catalog=NorthWind;User Id=sa;Password=;"/>    
            
    <add name="uoLib.OleDbAccess" connectionString=""/>    
            
    <add name="uoLib.OdbcSQLite" connectionString="DRIVER=SQLite3 ODBC Driver;Database=files/demo.db3;LongNames=0;Timeout=1000;NoTXN=0;SyncPragma=NORMAL;StepAPI=0;"/>    
        
    </connectionStrings>    
    </configuration>  
     

    web.config文件中可以将数据库的连接字符串留空。如上面的配置中,可以不配置uoLib.OleDbAccess的连接字符串,因为在 cs 代码中将另行写入。详见下:

    注意:

    1. 要使用数据库的单体实例,必须在web.config里面配置相应名称的连接字符串节。(可以留空,但必须有这一节,如上例中的uoLib.OleDbAccess
    2. 由于使用了单体模式,因此在整个项目中,将只存在一个数据库实例,在简化了数据库使用的同时也提高了性能。不过如此一来,在整个系统中也将仅有一个相同数据库的实例。以SqlClientSqlServer 为例,您无法使用SqlClientSqlServer.Instance来生成两个不同的数据库。(要在同一系统中使用多个相同数据库实例,请看Database的使用方法。)

    Database类使用示例

    如果uolib.dll提供的数据库单体实例无法满足您的需求,您可以使用Database这个类来建立自己的数据库实例,它提供了比单体实例更多、更完善的方法和属性。下面对Database类的使用作一个简单的示例:

    Code
    using System;    
    using System.Data;    
    using System.Data.Common;    
    using uoLib.Data;    
      
    namespace DemoWeb    
    {    
        
    public partial class Demo2 : System.Web.UI.Page    
        {    
            
    protected void Page_Load(object sender, EventArgs e)    
            {    
                
    //声明数据库实例    
                Database db = new Database(ConnectionType.SqlClient);    
                
    //初始化数据库连接    
                db.CreateConnection(    
                Database.CreateExampleConnectionString(    
                
    "127.0.0.1""NorthWind""sa""",    
                ConnectionType.SqlClient)    
                );    
                Response.Write(db.Conn.ConnectionString);    
                   
                
    //示例:执行 DbCommand    
                
    //可执行包括SELECT/INSERT/UPDATE/DELETE、存储过程等任何DbCommand命令    
                int _id = 10;    
                DbCommand cmd 
    = db.CreateCommand("DELETE FROM [TABLE] WHERE ID=@id");    
                cmd.Parameters.Add(db.CreateParameter(
    "@id", System.Data.DbType.Int32,_id));    
                Database.Execute(cmd);    
                   
                
    //示例:使用存储过程、查询数据库    
                cmd = db.CreateCommand("myProcedure");    
                cmd.CommandType 
    = CommandType.StoredProcedure;    
                cmd.Parameters.Add(db.CreateParameter(
    "@id", System.Data.DbType.Int32, _id));    
                DataSet ds 
    = db.SelectData(cmd);    
                
    if (ds == null)    
                {    
                Response.Write(
    "数据库为空!");    
                }    
                
    else {    
                
    //do something    
                }    
            }    
        }    

    Database类提供了很多的方法,此处无法写出所有的示例,您可以在使用中自行查看。uoLib中也提供了Database的父类BaseProvider以供继承。

    Code
    using System;    
    using System.Data;    
    using System.Data.Common;    
    using uoLib.Data.Singleton;    
      
    namespace DemoWeb    
    {    
        
    public partial class Demo : System.Web.UI.Page    
        {    
            
    protected void Page_Load(object sender, EventArgs e)    
            {    
                
    // 使用 SqlClient 链接字符串的 Sql Server 数据库   
                
    // 2000/2005/2008均可。    
                
    // 链接字符串配置名称:uoLib.SqlClientSqlServer    
                SqlClientSqlServer SQL = SqlClientSqlServer.Instance;    
                
    const string TABLENAME = "Products";    
                DbCommand cmd 
    = SQL.CreateCommand("SELECT TOP 1 ID FROM {0}", TABLENAME);    
                DataSet ds 
    = SQL.SelectData(cmd);    
                
    if (ds == null)    
                Response.Write(
    "数据库为空!");    
                
    else    
                Response.Write(
    string.Format("共 {0} 行记录。", ds.Tables[0].Rows.Count));    
                   
                
    // 使用 OleDb 链接字符串的 Access 数据库    
                
    // 97/2000/2007均可。    
                
    // 链接字符串配置名称:uoLib.OleDbAccess   
                OleDbAccess Access = OleDbAccess.Instance;    
                Access.CreateConnection(    
                OleDbAccess.CreateExampleConnectionString(    
                Server.MapPath(
    "files/test.mdb"), "uonun""udnz.com")    
                );    
                Response.Write(Access.Conn.ConnectionString);    
                   
                
    // 使用 Odbc 链接字符串的 SQLite 数据库。   
                
    // 链接字符串配置名称:uoLib.OdbcSQLite    
                OdbcSQLite SQLite = OdbcSQLite.Instance;    
                SQLite.Conn.Open();    
                
    //do something..    
                SQLite.Conn.Close();    
            }    
        }    
  • 相关阅读:
    YUI的treeview组件——带checkbox类型的treeview如何实现disabled功能
    [转载 js] 15个基于Web的HTML编辑器
    YUI3学习笔记 ( 8 )
    js中用于继承的函数extend——摘自《javascript设计模式》
    YUI的treeview组件——带checkbox类型的treeview如何实现disabled功能
    YUI3学习笔记 ( 8 )
    Delphi 2007 代码补全、语句提示的快捷键是什么?
    Fastreport使用经验(转)在Delphi程序中访问报表对象
    cxGrid使用记录
    Delphi编程地一些小程序
  • 原文地址:https://www.cnblogs.com/uonun/p/uoLib.html
Copyright © 2020-2023  润新知