当数据库连接被池化时,一组连接就处于打开状态,一边可以在多个用户之间来共享。当请求一个新的连接时,一个活动的连接就从连接池中移出。当关闭连接时,这个连接就被放回到连接池中。
在默认情况下,连接池在OleDb和SqlClient连接中都是被启用的。JavaScript笔记?OleDb连接池由OLE DB.NET提供者来控制。SqlClient连接池则有Windows 2000组件服务来控制。
要利用连接池的优势,就必须在ASP.NET页面中注意两个问题:首先,必须在打开的每一个数据库连接时使用同样的连接字符串。只有使用同样的连接字符串打开的连接才能被放到同一个连接池中。java笔记,
要在页面中利用连接池的优势,必须在每次打开连接的时候尽快地显示关闭连接。若果没有使用Close()方法显式关闭连接,则连接就不会被自动放回到连接池中。
使用SQL连接池,要在连接字符串中添加额外的选项,以便修正连接池如果运作。
Connection Lifetime(连接生命周期)-----在特定时间(单位为秒)后销毁连接。ASP考试?默认值为0,表示永不销毁.
Connection Reset(重置连接) -------表示在连接返回到连接池时,连接是否应当被重置。默认值True。
Enlist(征用)------表示连接是否应当在当前事务上下文中被自动征用。默认值True
Max Pool Size(最大池大小)-----在单个连接池中允许的最大连接数,(默认值为100)
Min Pool Size(最小池大小)------在单个连接池中允许的最小连接数,(默认值为0)
Pooling(池化)-----决定是否启用或禁用连接池,默认值为True;
高级数据库操作
事务:
创建事务的方法有三种。aspnet网站开发教程,可以在数据库级别、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
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
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--表示页面不再事务中执行。ASP.NET?
Supported--如果事务已经存在,页面就在事务上下文中执行,但是不会创建另外一个新事务。
Required--如果事务已经存在,页面就在事务上下文中执行,如果事务不存在,则创建一个新的事务。
RequiresNew--为每个请求创建一个新的事务。
在允许了针对ASP.Net页面的事务后,可以使用来自于ContextUtil类的两个放来来显式地提交或回滚一个事务:SetComplete和SetAbort方法。ASP和JSP。
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
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()
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()