<%@ Import Namespace="System.Data" %> <%@ Import Namespace="System" %> <%@ Import Namespace="System.Xml" %> <%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.SqlClient" %> <script Language="C#" runat="server"> protected void Page_Load(object sender, EventArgs e) { Response.Write("<HTML><BODY>"); Response.Write("<TABLE BORDER=2 WIDTH='40%' ALIGN=LEFT>"); Response.Write("<TR><TD ALIGN=LEFT><b>Function Name</b><TD ALIGN=LEFT><b>Milliseconds</b></TD></TR>"); Response.Write("<TR><TD ALIGN=LEFT COLSPAN=2></TD></TR>"); Response.Write("<TR><TD ALIGN=LEFT COLSPAN=2><b>ADO Test Option #1</b></TD></TR>"); Response.Write("<TR><TD ALIGN=LEFT COLSPAN=2></TD></TR>"); RunTest(1); Response.Write("<TR><TD ALIGN=LEFT COLSPAN=2><BR></TD></TR>"); Response.Write("<TR><TD ALIGN=LEFT COLSPAN=2><b>ADO Test Option #2</b></TD></TR>"); Response.Write("<TR><TD ALIGN=LEFT COLSPAN=2></TD></TR>"); RunTest(2); Response.Write("<TR><TD ALIGN=LEFT COLSPAN=2><BR></TD></TR>"); Response.Write("<TR><TD ALIGN=LEFT COLSPAN=2><b>ADO Test Option #3</b></TD></TR>"); Response.Write("<TR><TD ALIGN=LEFT COLSPAN=2></TD></TR>"); RunTest(3); Response.Write("</TABLE></BODY></HTML>"); } public void RunTest(int nOption) { ArrayList sRS = new ArrayList(); int nRetVal=0; int nMax = 100; string sSQL = GetTestSQL(nOption); SqlConnection oConn = new SqlConnection(); XmlDocument oXML = new XmlDocument(); XmlDocument oXML2 = new XmlDocument(); DataSet oDS = new DataSet(); DataTable oDT = new DataTable(); System.DateTime sStartTime; TimeSpan elapsed; oConn.ConnectionString = "user id=sa;password=;initial catalog=northwind;data source=(local)"; oConn.Open(); // Start ADOGetArray Test sStartTime = System.DateTime.Now; for (int i=0;i<nMax;i++) { nRetVal = ADOGetArray(oConn,sSQL,sRS); } elapsed = System.DateTime.Now - sStartTime; WM("ADOGetArray",elapsed.TotalMilliseconds.ToString() ); // Syntax for iterating through ArrayList that // contains arrays for each element. This // writes the first column for the first row. // foreach (string[] oArray in sRS) // { Console.WriteLine(oArray[0]); } // Start ADOGetDataSet Test sStartTime = System.DateTime.Now; for (int i=0;i<nMax;i++) { nRetVal = ADOGetDataSet(oConn,sSQL,oDS); } elapsed = System.DateTime.Now - sStartTime; WM("ADOGetDataSet",elapsed.TotalMilliseconds.ToString() ); // Start ADOGetDataTable Test sStartTime = System.DateTime.Now; for (int i=0;i<nMax;i++) { nRetVal = ADOGetDataTable(oConn,sSQL,oDT); } elapsed = System.DateTime.Now - sStartTime; WM("ADOGetDataTable",elapsed.TotalMilliseconds.ToString() ); // Start ADOGetDataSetXML Test sStartTime = System.DateTime.Now; for (int i=0;i<nMax;i++) { nRetVal = ADOGetDataSetXML(oConn,sSQL,oXML2); } elapsed = System.DateTime.Now - sStartTime; WM("ADOGetDataSetXML",elapsed.TotalMilliseconds.ToString() ); if (nOption != 3) { // Start ADOGetXMLDoc Test sStartTime = System.DateTime.Now; for (int i=0;i<nMax;i++) { nRetVal = ADOGetXMLDoc(oConn,sSQL,oXML); } elapsed = System.DateTime.Now - sStartTime; WM("ADOGetXMLDoc",elapsed.TotalMilliseconds.ToString() ); } else { WM("ADOGetXMLDoc","Not Supported"); } oConn.Close(); } public void WM(string sDesc,string sTime) { Response.Write("<TR><TD ALIGN=LEFT>" + sDesc + "</TD><TD ALIGN=LEFT>" + sTime + "</TD></TR>"); Response.Flush(); } public string GetTestSQL(int nOption) { string sSQL=null; switch (nOption) { case 1: sSQL = "select companyname,contactname from customers "; break; case 2: sSQL = "select categoryid,categoryname from categories "; break; case 3: sSQL += "SELECT ProductName, Total=SUM(Quantity) "; sSQL += " FROM Products P, [Order Details] OD, Orders O, Customers C " ; sSQL += " WHERE C.CustomerID = 'ANATR' " ; sSQL += " AND C.CustomerID = O.CustomerID " ; sSQL += " AND O.OrderID = OD.OrderID" ; sSQL += " AND OD.ProductID = P.ProductID" ; sSQL += " GROUP BY ProductName" ; break; } return sSQL; } public int ADOGetArray(SqlConnection oConn,string sSQL, ArrayList sRS) { int nRetVal = 0; string [] sTmpRec=null; try { SqlCommand oCmd = new SqlCommand(sSQL,oConn); SqlDataReader oReader = oCmd.ExecuteReader(); int nCols = oReader.FieldCount; while (oReader.Read()) { sTmpRec = new string[nCols]; for (int nCol=0;nCol<nCols;nCol++) { sTmpRec[nCol] = oReader.GetValue(nCol).ToString(); } sRS.Add(sTmpRec); } oReader.Close(); nRetVal = 1; } catch (Exception e) { nRetVal = 2; Response.Write(e.Message);} return nRetVal; } public int ADOGetDataSet(SqlConnection oConn,string sSQL, DataSet oRetDS) { int nRetVal = 0; try { SqlDataAdapter oDA = new SqlDataAdapter(sSQL,oConn); oDA.Fill(oRetDS,"Categories"); nRetVal = 1; } catch (Exception e) { nRetVal = 2; } return nRetVal; } public int ADOGetDataTable(SqlConnection oConn,string sSQL, DataTable oRetDT) { int nRetVal = 0; try { SqlDataAdapter oDA = new SqlDataAdapter(sSQL,oConn); oDA.Fill(oRetDT); nRetVal = 1; } catch (Exception e) { nRetVal = 2; } return nRetVal; } public int ADOGetDataSetXML(SqlConnection oConn,string sSQL, XmlDocument oRetXML) { int nRetVal = 0; try { SqlDataAdapter oDA = new SqlDataAdapter(sSQL,oConn); DataSet oDS = new DataSet(); oDA.Fill(oDS,"Categories"); oRetXML.LoadXml(oDS.GetXml()); nRetVal = 1; } catch (Exception e) { nRetVal = 2; } return nRetVal; } public int ADOGetXMLDoc(SqlConnection oConn,string sSQL, XmlDocument oRetXML) { string sTmpVal = null; int nRetVal = 0; try { SqlCommand oCmd = new SqlCommand(sSQL + " FOR XML AUTO",oConn); XmlReader oReader = oCmd.ExecuteXmlReader(); while (oReader.Read()) { sTmpVal += oReader.ReadOuterXml(); } oReader.Close(); oRetXML.LoadXml("<?xml version='1.0' encoding='utf-8'?><XMLRECORD>" + sTmpVal + "</XMLRECORD>"); nRetVal = 1; } catch (Exception e) { nRetVal = 2; } return nRetVal; } </script>
<!--METADATA NAME="Microsoft ActiveX Data Objects 2.6 Library" TYPE="TypeLib" UUID="{00000206-0000-0010-8000-00AA006D2EA4}"--> <% Response.Buffer = true Response.Expires = -1000 Response.ExpiresAbsolute = Now() - 1 Response.AddHeader "pragma","no-cache" Response.AddHeader "cache-control","private" Response.CacheControl = "no-cache" dim mnTot dim msSec dim moADOCon dim moADORec mnTot = 100 Class clsTimer Private m_StartTimer Private Sub Class_Initialize() m_StartTimer = Timer End Sub Public Function GetElapsedTime() GetElapsedTime = (timer-m_StartTimer) * 1000 end Function End Class Sub ADOGetArray(sSQL,sRS) Dim nCnt Dim objTimer Set objTimer = New clsTimer For nCnt = 1 to mnTot If moADORec.State = adStateOpen Then moADORec.Close moADORec.CursorType = adOpenStatic moADORec.LockType = adLockReadOnly moADORec.Open sSQL sRS = moADORec.GetRows Next msSec = objTimer.GetElapsedTime Set objTimer = Nothing Call WM ("ADOGetArray", msSec) End Sub Sub ADOGetDataSetXML(sSQL,oStream,oXML) Dim nCnt Dim objTimer Set objTimer = New clsTimer For nCnt = 1 to mnTot If moADORec.State = adStateOpen Then moADORec.Close moADORec.CursorType = adOpenStatic moADORec.LockType = adLockReadOnly moADORec.Open sSQL moADORec.Save oStream, adPersistXML oXML.LoadXML oStream.ReadText(adReadAll) Next msSec = objTimer.GetElapsedTime Set objTimer = Nothing Call WM ("ADOGetDataSetXML", msSec) End Sub Sub WM(sDesc,sTime) Response.Write("<TR><TD ALIGN=LEFT class=clsFieldLabel>" & sDesc & "</TD>") Response.write ("<TD ALIGN=LEFT class=clsBodyText>" & sTime & "</TD></TR>" & vbcrlf) Response.Flush() End Sub Function GetTestSQL(nOption) Dim sSQL Select Case nOption Case 1: sSQL = "select companyname,contactname from customers " Case 2: sSQL = "select categoryid,categoryname from categories " Case 3 sSQL = sSQL & "SELECT ProductName, Total=SUM(Quantity) " sSQL = sSQL & " FROM Products P, [Order Details] OD, Orders O, Customers C " sSQL = sSQL & " WHERE C.CustomerID = 'ANATR' " sSQL = sSQL & " AND C.CustomerID = O.CustomerID " sSQL = sSQL & " AND O.OrderID = OD.OrderID" sSQL = sSQL & " AND OD.ProductID = P.ProductID" sSQL = sSQL & " GROUP BY ProductName" End Select GetTestSQL = sSQL End Function Sub RunTest(nOption) Dim sRS nRetVal=0 nMax = 100 sSQL = GetTestSQL(nOption) Set oXMLDoc = Server.CreateObject("MSXML2.DOMDocument.3.0") Set oStream =Server.CreateObject("ADODB.Stream") oXMLDoc.async = False Set moADOCon = Server.CreateObject("ADODB.Connection") Set moADORec = Server.CreateObject("ADODB.Recordset") moADOCon.CursorLocation = adUseClient moADOCon.open "Provider=SQLOLEDB;Data Source=(local);User ID=sa;Password=;Initial Catalog=NORTHWIND" Set moADORec.ActiveConnection = moADOCon Call ADOGetArray(sSQL,sRS) Call ADOGetDataSetXML(sSQL,oStream,oXMLDoc) On Error Resume Next If moADORec.STATE = adStateOpen Then moADORec.Close If moADOCon.STATE = adStateOpen Then moADOCon.Close Set moADORec = Nothing Set moADOCon = Nothing Set oStream = nothing Set oXMLDoc = nothing End Sub Response.Write("<TABLE BORDER=2 WIDTH='90%' ALIGN=LEFT>" & vbcrlf ) Response.Write("<TR><TD ALIGN=LEFT class=clsFieldLabel>Function Name"); Response.Write("<TD ALIGN=LEFT class=clsFieldLabel>Milliseconds</TD></TR>" & vbcrlf) Response.Write("<TR><TD ALIGN=LEFT COLSPAN=2></TD></TR>" & vbcrlf) Response.Write("<TR><TD ALIGN=LEFT COLSPAN=2 class=clsFieldLabel>ADO Test Option #1</TD></TR>" & vbcrlf) Response.Write("<TR><TD ALIGN=LEFT COLSPAN=2></TD></TR>" & vbcrlf) Call RunTest(1) Response.Write("<TR><TD ALIGN=LEFT COLSPAN=2><BR></TD></TR>" & vbcrlf) Response.Write("<TR><TD ALIGN=LEFT COLSPAN=2 class=clsFieldLabel>ADO Test Option #2</TD></TR>" & vbcrlf) Response.Write("<TR><TD ALIGN=LEFT COLSPAN=2></TD></TR>" & vbcrlf) Call RunTest(2) Response.Write("<TR><TD ALIGN=LEFT COLSPAN=2><BR></TD></TR>" & vbcrlf) Response.Write("<TR><TD ALIGN=LEFT COLSPAN=2 class=clsFieldLabel>ADO Test Option #3</TD></TR>" & vbcrlf) Response.Write("<TR><TD ALIGN=LEFT COLSPAN=2></TD></TR>" & vbcrlf) Call RunTest(3) Response.Write("</TABLE>") %>