数据库

本类阅读TOP10

·SQL语句导入导出大全
·SQL Server日期计算
·SQL语句导入导出大全
·SQL to Excel 的应用
·Oracle中password file的作用及说明
·MS SQLServer OLEDB分布式事务无法启动的一般解决方案
·sqlserver2000数据库置疑的解决方法
·一个比较实用的大数据量分页存储过程
·如何在正运行 SQL Server 7.0 的服务器之间传输登录和密码
·SQL中两台服务器间使用连接服务器

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
数据库高级应用

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

一、连接池

     1、特点:

、优点:性能

、缺点:可能存在多个没有被使用的连接,资源浪费

2ADO.NET连接池

包含在ADO.NET中的每个.NET数据提供程序都可实现连接池。

②每个连接池都与一个独立的连接字符串及其事务上下文关联。每次打开一个新的连接,数据提供者会尝试将指定的连接字符串与连接池的字符串进行匹配。如果失败,则创建新连接并加入连接池。

③连接池创建之后,系统会创建一些连接对象并将它们加入连接池,直至达到额定的最小连接对象数量。以后根据需要创建新的连接,直到达到最大连接数量。

④.NET默认是使用连接池。如果想禁用,则可以使用以下方式:

Ⅰ、使用SqlConnection对象时,在连接字符串加入:Pooling = false

Ⅱ、使用OleDBConnection对象时,在连接字符串加入:OLE DB Services = -4

     3、提示和技巧

①打开连接应迟,关闭连接应早

②在关闭数据库连接前确保关闭了所有用户定义的事务

③至少保证连接池中有一个连接可用

二、缓存

     1、特点

、优点:提高性能,稳定性,可用性

ASP.NET缓存

Ⅰ、在ASP.NET中,提供了专门用于缓存数据的Cache对象,它的应用范围是应用程序域。生存期是和应用程序紧密相关的,每当应用程序启动的时候就重新创建Cache对象,每当应用程序启动的时候就重新创建Cache对象。它与Application对象的主要区别就是提供了专门用于缓存管理的性能,比如依赖和过期策略。

Cache对象定义在System.Web.Caching命名空间,可以使用HttpContext类的Cache属性或Page对象的Cache属性来得到Cache的引用,Cache对象除了存储键值以外,还可以存储.NET框架的对象。

2、依赖和过期策略

①文件策略:当硬盘上的某个(某些)文件更改时,强制移除缓存数据

    CacheDependency cDependency = new CacheDependency(Server.MapPath(authors.xml));

    Cache.Insert(CachedItem,item,cDependency);

②键值依赖:指定缓存中的某个数据项更改时移除。

    //Create a cache entry

    Cache[key1”]=Value1;

    //Make key2 dependent on key1

    String[] dependencyKey = new String[1];

    dependencyKey[0] = Key1;

    CacheDependency dependency = new CacheDependency(null,dependencyKey);

    Cache.Insert(key2”,“Value2”,dependency);

③基于时间的过期策略:绝对和相对

    //Absolute expiration

    Cache.Insert(CachedItem,item,null,DateTime.Now,AddSeconds(5),Cache.NoSlidingExpiration);

    //Sliding expiration

    Cache.Insert(“”,item,null,Cache.NoAbsoluteExpiration,TimeSpan.FromSeconds(5));

④数据库依赖(建议不要使用):数据库中相关的数据发生变化,则缓存失效

    3、使用缓存:由于数据会过期,使用缓存时必须检查数据的有效性

        string data = (string)Cache[MyItem];    

        if(data==null)

        {

            data=GetData();

            Cache.Insert(MyItem”,data);

        }

    4、缓存回调:当缓存失效时,自动调用

        CacheItemRemoveCallback onRemove = new CacheItemRemovedCallack(this.RemoveCallback);

        Cache.Insert(CachedItem,item,null,Cache.NoAbsoluteExpiration,Cache.NoSlidingExpiration,CacheItemPriority.Default,onRemove);

    //Implement the function to handle the expiration of the cache.

    public void RemovedCallback(string key,obejct value,CacheItemRemonvedReason r)

    {

        //Test whether the item is expired and reinsert it into the cache.

        if(r==CacheItemRemovedReason.Expired)

        {

            //Reinsert it into the cache again.

            CacheItemRemovedCallback onRemove == null;

            onRemove = new CacheItemRemoveCallback(this.RemovedCallback);

            Cache.Insert(key,value,null,Cache.NoAbsoluteExpiration,Cache.NoSlidingExpiration,CacheItemPriority.Default,onRemove);

        }

    }

    5、缓存优先级:当运行应用程序服务器的内存不足时,会自动清楚缓存中的数据,称为“清除scavenging

        Cache.Insert(DSN,connectionString,null,d,t,CacheItemPriority.High,onRemove);

    6、在非Web项目中使用ASP.NET缓存

        HttpRuntime.Cache对象可以在Aspnet_wp.exe之外的每个应用程序域中存在。

        HttpRuntime httpRT = new HttpRuntime();

        Cache cache = HttpRuntime.Cache;

三、事务

1、直接写入到sql中 :在存储过程中使用Begin Trans,Commit Trans,RollBack Trans实现。

    Begin Trans

    Declare @orderDetailsError int,@productError int

    Delete from "Order Details" where ProductID = 42

    Select @orderDetailsError = @@Error

    Delete from Products where ProductID = 42

    Select @productError = @@Error

    if @orderDetailsError = 0 and @productError = 0

    Commit Trans

    else

    RollBack Trans

优点:所有的事务逻辑包含在一个单独的调用中

      拥有运行一个事务的最佳性能

      独立于应用程序

限制:事务上下文仅存在于数据库调用中

      数据库代码与数据库系统有关

2、使用ADO.NET实现:可以在中间层来管理事务。SqlConnectionOleDBConnection对象有一个BeginTransaction方法,可以返回SqlTransactionOleDbTransaction对象。

    cn.Open();

    SqlTransaction trans = cn.BeginTransaction();

    SqlCommand cmd = new SqlCommand();

    try

    {

        cmd.CommandText = "Delete [Order Details] where ProductID = 23";

        cmd.ExecuteNonQuery();

        cmd.CommandText = "Delete Products where ProductID =23";

        cmd.ExecuteNonQuery();

        Trans.Commit();

    }

    Catch(Exception e)

        trans.Rollback();

    Finally

        cn.Close();

优点:简单性;和数据库事务差不多的快;独立于数据库

缺点:事务不能跨越多个数据库连接;

      事务执行在数据库连接层上,所以需要在事务过程中维护一个数据库连接;

四、分布式事务

    1、特点:

    要参与COM+事务,.NET类必须是从System.EnterpriseServices.ServicedComponent类继承。

    通过使用System.EnterpriseServices.ContextUtil类可以获取有关COM+对象上下文信息,它提供SetCompleteSetAbort方法,以便分别显示提交和回滚事务。

    优点:在需要事务跨MSMQ和其他可识别事务的资源运行系统中,只能使用DTCCOM+事务。DTC协调参与分布式事务的所有资源管理器,也管理与事务相关的操作。

    缺点:由于存在DTCCOM互相操作性开销,导致性能降低。

2、事务类型:

、自动事务:使用System.EnterpriseServices.AutoComplete属性

    [Transaction(TransactionOption.Required)]

    public class Class1:ServicedComponent

    {

        [AutoComplete]

        public void Example()

        {}

    }

、手动事务

public string TransferMoneyFromBToA(double m)

    {

        try

        {

            ContextUtil.EnableCommit();

            this.TransferOutFromB(m);

            this.TransferInToA(m);

            ContextUtil.SetComplete();

        }

        catch(Exception err)

        {

            ContextUtil.SetAbort();

        }

    }

3、方式选择

对于下面的情况,需使用手工事务处理:对单个数据库执行事务处理;

对于下面的情况,则宜使用自动事务处理:

需要将单个事务处理扩展到多个远程数据库时;

②、需要单个事务处理拥有多个资源管理器(如数据库和Windows2000消息队列资源管理器);

          注意:避免混用事务处理模型,最好只使用其中一个。




相关文章

相关软件