四、Command對象: 從英語字面的意思就可以看出,Command是用來做命令執(zhí)行和參數(shù)傳遞的。而Command對象的批量參數(shù)傳遞,StoredProcude執(zhí)行等等靈活而強(qiáng)大的功能也是它受到青睞的原因。Command對象主要是向SQL語句、StoredProcude傳遞參數(shù),依靠SQL Server的強(qiáng)大功能來完成數(shù)據(jù)庫的操作;而RecordSet對象可以說是微軟從新封裝了數(shù)據(jù)對象,并提供了一系列的方法和屬性來簡化數(shù)據(jù)庫的編程。我們看下面的一個(gè)例子,它用了兩種不同的方法實(shí)現(xiàn)了向數(shù)據(jù)庫中增加一新的記錄條。從中可以清楚的看到Command對象與RecordSet對象的不同點(diǎn)。 方法1(Command) const adCmdText=&H0001 const adInteger=3 const adVarChar=200 const adParamInput = &H0001 set conn=Server.CreateObject("ADODB.Connection") set comm=Server.Createobject("ADODB.Command") conn.open "Driver={ Microsoft Access Driver};DBQ="& _ Server.Mappath("/source_asp")&"/property/employee.mdb;" comm.ActiveConnection=conn comm.CommandType=adCmdText comm.CommandText="insert into employee (Job_ID,Fri_Name,Last_Name)"& _ &"values(?,?,?)" set param=comm.CreateParameter("ID",adInteger,adParamInput,3,4) comm.Parameters.Append param set param=comm.CreateParameter("FN",adVarChar,adParamInput,255,"bill") comm.Parameters.Append param set param=comm.CreateParameter("LN",adVarChar,adParamInput,255,"Gates") comm.Parameters.Append param comm.Execute conn.close
方法2(RecordSet) const adCmdTable=&H0002 set conn=Server.CreateObject("ADODB.Connection") set rs=Server.Createobject("ADODB.RecordSet") conn.open "Driver={Microsoft Access Driver (*.mdb)};DBQ="& _ Server.Mappath("/source_asp")&"/property/employee.mdb;" rs.ActiveConnection=conn rs.open "employee",,,adCmdTable rs.addnew rs("Job_ID")=4 rs("Fri_Name")="bill" rs("Last_Name")="Gates" rs.update rs.close conn.close 從上面的例子就可以看出來了,這兩個(gè)對象在處理一些問題上所用的不同的方法.RecordSet對象似乎更加好理解一些,因?yàn)樗尤肓艘恍┰贏NSI SQL中沒有的元素,它其實(shí)是用 SQL在數(shù)據(jù)庫上產(chǎn)生一個(gè)記錄集,然后用一個(gè)游標(biāo)來指向這個(gè)記錄集,超作該游標(biāo)來遍歷這個(gè)記錄集。但在性能上來講的話Command的性能也相對要優(yōu)越些.其可重應(yīng)用性也非常的好。而且如果你是批量的加入記錄的話,你也能體會到第一種方案的好處了,因?yàn)镃ommand對象就是將SQL產(chǎn)生的記錄集作為整體來處理。下面詳細(xì)介紹Command對象的屬性、方法和集合。
1、 CreateParameter方法:用來產(chǎn)生一個(gè)Parameter對象,常用的寫法為Set param=comm.CreateParameter(name,type,direction,size,value),其中name為參數(shù)的引用名,在后面引用參數(shù)的值時(shí)會有用;type為指定參數(shù)的類型,例如整數(shù)為adInteger;direction指定參數(shù)是輸入還是輸出,相應(yīng)的值為adParamInput和adParamOutput;size指定參數(shù)的最大長度或最大的值;value指定參數(shù)的值。可以將各個(gè)選項(xiàng)分開來寫,下面的兩種寫法是等價(jià)的: Set param= comm.CreateParameter(name,type,direction,size,value) 和 set param= comm.CreateParameter(name,type,direction,size) param.value=value 下面的方法其靈活性更大。大家請注意,在使用了CreateParameter方法后只是建立了新的 parameter對象,還需使用Parameter對象的append方法將該參數(shù)傳遞給Command對象。 2、 Execute方法:在指定了CommandText后,并將參數(shù)傳遞出去后,用Execute方法來完成執(zhí)行。 3、 ActiveConnection屬性:用來指定與Connection對象的連接,這里的一個(gè)技巧就是不同的Command對象指向同一個(gè)Connection連接。 4、 CommandText屬性:其值可以是一條SQL命令句,可以是一個(gè)表名,也可以是一個(gè)StoredProcedure名。 5、 CommandType屬性:它的值由CommandText相應(yīng)值的給出,分別為adCmdText,adCmdTable,adCmdStoredProc。與前面在講Connection對象的Execute方法中的相應(yīng)的選項(xiàng)的含義相同。 6、 CommandTimeOut屬性:設(shè)定命令執(zhí)行的超時(shí)的值。 7、 Properties集合:我們不多講了,與Connection對象的Property集合相差不多。 8、 Parameters集合:也就是參數(shù)對象的集合了,他有主要Item方法、Append方法,和Count屬性,用法與Property對象及Error對象的相應(yīng)屬性和方法類似,下面給出一個(gè)示例: const adCmdText=&H0001 const adInteger=3 const adVarChar=200 Const adParamInput = &H0001 set conn=Server.CreateObject("ADODB.Connection") set comm=Server.Createobject("ADODB.Command") conn.open "Driver={Microsoft Access Driver (*.mdb)};DBQ="& _ Server.Mappath("/source_asp")&"/property/employee.mdb;" comm.ActiveConnection=conn comm.CommandType=adCmdText comm.CommandText="Insert Into employee (Job_ID,Fri_Name,Last_Name)"& _ "Values(?,?,?);" set param=comm.CreateParameter("ID",adInteger,adParamInput,3) param.value=14 comm.Parameters.Append param set param=comm.CreateParameter("FN",adVarChar,adParamInput,255,"bill") comm.Parameters.Append param set param=comm.CreateParameter("LN",adVarChar,adParamInput,255,"Gates") comm.Parameters.Append param comm.Execute conn.close "The folowing statments show the value of parametrs dim i for i=0 to comm.parameters.count-1 response.write comm.parameters.item(i)&"<br>" next 當(dāng)然,我們在引用參數(shù)時(shí)也可以不用數(shù)字,而用前面在CreateParameter時(shí)定義的名字,例如:FN、ID等等。另外我們可以將上面的程序的顯示部分改為 dim key for each key in comm.parameters response.write key&"<br>" next 下面我想重點(diǎn)講一講StoredProcedure,它的強(qiáng)大足以讓我們對它關(guān)注,當(dāng)然這其中會涉及到一些SQLServer的知識
|