ASPNET揭秘笔记之三
使用连接池提高性能:
当数据库连接被池化时,一组连接就处于打开状态,一边可以在多个用户之间来共享。当请求一个新的连接时,一个活动的连接就从连接池中移出。当关闭连接时,这个连接就被放回到连接池中。
在默认情况下,连接池在OleDb和SqlClient连接中都是被启用的。OleDb连接池由OLE DB.NET提供者来控制。SqlClient连接池则有Windows 2000组件服务来控制。
要利用连接池的优势,就必须在ASP.NET页面中注意两个问题:首先,必须在打开的每一个数据库连接时使用同样的连接字符串。只有使用同样的连接字符串打开的连接才能被放到同一个连接池中。
要在页面中利用连接池的优势,必须在每次打开连接的时候尽快地显示关闭连接。若果没有使用Close()方法显式关闭连接,则连接就不会被自动放回到连接池中。
使用SQL连接池,要在连接字符串中添加额外的选项,以便修正连接池如果运作。
Connection Lifetime(连接生命周期)-----在特定时间(单位为秒)后销毁连接。默认值为0,表示永不销毁.
Connection Reset(重置连接) -------表示在连接返回到连接池时,连接是否应当被重置。默认值True。
Enlist(征用)------表示连接是否应当在当前事务上下文中被自动征用。默认值True
Max Pool Size(最大池大小)-----在单个连接池中允许的最大连接数,(默认值为100)
Min Pool Size(最小池大小)------在单个连接池中允许的最小连接数,(默认值为0)
Pooling(池化)-----决定是否启用或禁用连接池,默认值为True;
高级数据库操作
事务:
创建事务的方法有三种。可以在数据库级别、ADO.NET级别或是在整个ASP.Net页面级别上创建事务.
创建数据库事务:
Create Procedure UpdateAccounts
As
Begin TransAction
Update AcountA Set Balance=Lalance-1000 where UserName='smith'
update AcountB Set Blance=Blance+1000 where UserName='smith'
Commit TransAction
创建ADO.NET事务
ADO.NET可以通过Connection和Transaction类来支持事务。可以使用Connection类的Begin Transaction方法来创建一个新的事务。然后通过Command类的Transaction属性吧这个事务与多个Command关联
Dim objTransaction as SqlTransaction
Dim conBank as SqlConnection
dim strUpdateAcctountA as string
dim strUpdateAcctountB as string
dim cmdA as SqlCommand
dim cmdB as sqlCommand

conBank=new SqlConnection("Server=.;Uid=sa;pwd=sa;database=Bank")
strUpdateAccountA=""
strUpdateAccoutnB=""
cmdA=new SqlCommand(strUpdateAccountA,conBank)
cmdB=new SqlCommand(strUpdateAccountB,conBank)
conBank.Open()

objTransaction=conBank.BeginTranaction
cmdA.Transaction=objTransaction
cmdB.Transaction=objTransaction

try
cmdA.ExecuteNonQuery()
cmdB.ExecuteNonQuery()
objTransaction.Commit
Response.Write("Transaction Successful!")
catch ex as Exception
objTransaction.RollBack
Response.Writte("Transaction Failed!")
finally
conBank.Close()
end try


创建ASP.Net页面的事务
通过在ASP.net页面中添加下列页面处理指令之一来为asp.net页面注册事务:
Disabled--对页面禁用事务,这是默认值。
NotSupported--表示页面不再事务中执行。
Supported--如果事务已经存在,页面就在事务上下文中执行,但是不会创建另外一个新事务。
Required--如果事务已经存在,页面就在事务上下文中执行,如果事务不存在,则创建一个新的事务。
RequiresNew--为每个请求创建一个新的事务。
在允许了针对ASP.Net页面的事务后,可以使用来自于ContextUtil类的两个放来来显式地提交或回滚一个事务:SetComplete和SetAbort方法。
Dim conBank as SqlConnection
dim strUpdateAcctountA as string
dim strUpdateAcctountB as string
dim cmdA as SqlCommand
dim cmdB as sqlCommand

conBank=new SqlConnection("Server=.;Uid=sa;pwd=sa;database=Bank")
strUpdateAccountA=""
strUpdateAccoutnB=""
cmdA=new SqlCommand(strUpdateAccountA,conBank)
cmdB=new SqlCommand(strUpdateAccountB,conBank)
conBank.Open()

try
cmdA.ExecuteNonQuery()
cmdB.ExecuteNonQuery()

ContextUtil.SetComplete()
Response.Write("Transaction Successful!")
catch ex as Exception
ContextUtil.SetAbort()
Response.Writte("Transaction Failed!")
finally
conBank.Close()
end try


检索数据表的架构信息:
使用DataReader类的GetSchemaTable()方法,GetSchemaTable()方法返回一个DataTable类的实例。
通常,要把GetSchemaTable()方法与CommandBehavior枚举类型的CommandBehavior.KeyInfo或CommandBehaVior.SchemaOnly值一起使用。
dim conn as SqlConnection
dim cmd as SqlCommand
dim dr as SqlDataReader
dim dt as DataTable

conn=new SqlConnection("server=.;uid=sa;pwd=sa;database=pubs")
cmd=new SqlCommand("select * from Authors",conn)
conn.open()
dr=cmd.ExecuteReader(Command.Behavior.KeyInfo or CommandBehavior.SchemaOnly)
dt=dr.GetSchemaTable()

myDataGrid.DataSource=dt
myDataGrid.DataBind()
dr.close()
conn.close()
当数据库连接被池化时,一组连接就处于打开状态,一边可以在多个用户之间来共享。当请求一个新的连接时,一个活动的连接就从连接池中移出。当关闭连接时,这个连接就被放回到连接池中。
在默认情况下,连接池在OleDb和SqlClient连接中都是被启用的。OleDb连接池由OLE DB.NET提供者来控制。SqlClient连接池则有Windows 2000组件服务来控制。
要利用连接池的优势,就必须在ASP.NET页面中注意两个问题:首先,必须在打开的每一个数据库连接时使用同样的连接字符串。只有使用同样的连接字符串打开的连接才能被放到同一个连接池中。
要在页面中利用连接池的优势,必须在每次打开连接的时候尽快地显示关闭连接。若果没有使用Close()方法显式关闭连接,则连接就不会被自动放回到连接池中。
使用SQL连接池,要在连接字符串中添加额外的选项,以便修正连接池如果运作。
Connection Lifetime(连接生命周期)-----在特定时间(单位为秒)后销毁连接。默认值为0,表示永不销毁.
Connection Reset(重置连接) -------表示在连接返回到连接池时,连接是否应当被重置。默认值True。
Enlist(征用)------表示连接是否应当在当前事务上下文中被自动征用。默认值True
Max Pool Size(最大池大小)-----在单个连接池中允许的最大连接数,(默认值为100)
Min Pool Size(最小池大小)------在单个连接池中允许的最小连接数,(默认值为0)
Pooling(池化)-----决定是否启用或禁用连接池,默认值为True;
高级数据库操作
事务:
创建事务的方法有三种。可以在数据库级别、ADO.NET级别或是在整个ASP.Net页面级别上创建事务.
创建数据库事务:






创建ADO.NET事务
ADO.NET可以通过Connection和Transaction类来支持事务。可以使用Connection类的Begin Transaction方法来创建一个新的事务。然后通过Command类的Transaction属性吧这个事务与多个Command关联

































创建ASP.Net页面的事务
通过在ASP.net页面中添加下列页面处理指令之一来为asp.net页面注册事务:
Disabled--对页面禁用事务,这是默认值。
NotSupported--表示页面不再事务中执行。
Supported--如果事务已经存在,页面就在事务上下文中执行,但是不会创建另外一个新事务。
Required--如果事务已经存在,页面就在事务上下文中执行,如果事务不存在,则创建一个新的事务。
RequiresNew--为每个请求创建一个新的事务。
在允许了针对ASP.Net页面的事务后,可以使用来自于ContextUtil类的两个放来来显式地提交或回滚一个事务:SetComplete和SetAbort方法。




























检索数据表的架构信息:
使用DataReader类的GetSchemaTable()方法,GetSchemaTable()方法返回一个DataTable类的实例。
通常,要把GetSchemaTable()方法与CommandBehavior枚举类型的CommandBehavior.KeyInfo或CommandBehaVior.SchemaOnly值一起使用。















在梦想和现实之间寻找平衡 在欲望和理想之间左右的妥协!平淡又平凡的努力生活!