四、Command對象: 從英語字面的意思就可以看出,Command是用來做命令執行和參數傳遞的。而Command對象的批量參數傳遞,StoredProcude執行等等靈活而強大的功能也是它受到青睞的原因。Command對象主要是向SQL語句、StoredProcude傳遞參數,依靠SQL Server的強大功能來完成數據庫的操作;而RecordSet對象可以說是微軟從新封裝了數據對象,并提供了一系列的方法和屬性來簡化數據庫的編程。我們看下面的一個例子,它用了兩種不同的方法實現了向數據庫中增加一新的記錄條。從中可以清楚的看到Command對象與RecordSet對象的不同點。 方法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 從上面的例子就可以看出來了,這兩個對象在處理一些問題上所用的不同的方法.RecordSet對象似乎更加好理解一些,因為它加入了一些在ANSI SQL中沒有的元素,它其實是用 SQL在數據庫上產生一個記錄集,然后用一個游標來指向這個記錄集,超作該游標來遍歷這個記錄集。但在性能上來講的話Command的性能也相對要優越些.其可重應用性也非常的好。而且如果你是批量的加入記錄的話,你也能體會到第一種方案的好處了,因為Command對象就是將SQL產生的記錄集作為整體來處理。下面詳細介紹Command對象的屬性、方法和集合。
1、 CreateParameter方法:用來產生一個Parameter對象,常用的寫法為Set param=comm.CreateParameter(name,type,direction,size,value),其中name為參數的引用名,在后面引用參數的值時會有用;type為指定參數的類型,例如整數為adInteger;direction指定參數是輸入還是輸出,相應的值為adParamInput和adParamOutput;size指定參數的最大長度或最大的值;value指定參數的值。可以將各個選項分開來寫,下面的兩種寫法是等價的: Set param= comm.CreateParameter(name,type,direction,size,value) 和 set param= comm.CreateParameter(name,type,direction,size) param.value=value 下面的方法其靈活性更大。大家請注意,在使用了CreateParameter方法后只是建立了新的 parameter對象,還需使用Parameter對象的append方法將該參數傳遞給Command對象。 2、 Execute方法:在指定了CommandText后,并將參數傳遞出去后,用Execute方法來完成執行。 3、 ActiveConnection屬性:用來指定與Connection對象的連接,這里的一個技巧就是不同的Command對象指向同一個Connection連接。 4、 CommandText屬性:其值可以是一條SQL命令句,可以是一個表名,也可以是一個StoredProcedure名。 5、 CommandType屬性:它的值由CommandText相應值的給出,分別為adCmdText,adCmdTable,adCmdStoredProc。與前面在講Connection對象的Execute方法中的相應的選項的含義相同。 6、 CommandTimeOut屬性:設定命令執行的超時的值。 7、 Properties集合:我們不多講了,與Connection對象的Property集合相差不多。 8、 Parameters集合:也就是參數對象的集合了,他有主要Item方法、Append方法,和Count屬性,用法與Property對象及Error對象的相應屬性和方法類似,下面給出一個示例: 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 當然,我們在引用參數時也可以不用數字,而用前面在CreateParameter時定義的名字,例如:FN、ID等等。另外我們可以將上面的程序的顯示部分改為 dim key for each key in comm.parameters response.write key&"<br>" next 下面我想重點講一講StoredProcedure,它的強大足以讓我們對它關注,當然這其中會涉及到一些SQLServer的知識
|