Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1134 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  SGBD / ASP : Page tester des procédures stockées SQL Server depuis ASP

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

SGBD / ASP : Page tester des procédures stockées SQL Server depuis ASP

n°1155580
Arjuna
Aircraft Ident.: F-MBSD
Posté le 21-07-2005 à 09:54:58  profilanswer
 

Salut,
 
Hier, j'étais confronté à un gros problème de performances sur un site qu'on vient de passer en production.
 
Afin de vérifier la rapidité des procédures stockées entre le serveur BDD et IIS, j'ai donc dû créer une page qui execute des procédures stockées, charge le résultat, et indique en combien de temps ça a tourné.
 
=> Etant donné que pour mon "bench", j'avais décidé de tester 10 procédures différentes, chacune plusieurs fois avec des paramètres différents, j'ai décidé de faire une page générique, qui permette de sasir le nom de la PS a executer, ainsi que ses paramètres, mais tout en conservant l'utilisation de l'objet ADODB.Command (donc pas de exec de bourrin).
 
Voici le code de la page, qui pourrait vous être utile aussi.
Il reste à rajouter les autres types de données (pour le moment, elle n'accepte que les type Int, Varchar et DateTime) ainsi que les contrôles de base, genre si la PS existe, ou si on tente de lancer une PS en oubliant un paramètre obligatoire.
 

Code :
  1. <%@Language="VBScript"%>
  2. <%
  3. Option Explicit
  4. ' 1 heure, ça devrait suffir...
  5. Server.ScriptTimeout = 3600
  6. Dim fVal(1)
  7. fVal(0) = timer
  8. %>
  9. <html>
  10. <head>
  11.  <title>Page de test SQL</title>
  12. </head>
  13. <body>
  14. <%
  15. If Request.Form = "" Then
  16. ' Affichage d'un formulaire de saisie de la procédure et des paramètres
  17. %>
  18.  <p>Veuillez sasir le nom d'une procédure stockée à executer, ainsi que la liste des paramètres (un par ligne, sous la forme "@nomParam=valeur" ).<br>Tapez "(null)" pour les valeurs nulles.
  19.  <form name="frmSQL" method="POST">
  20.   <dl>
  21.    <dt>Procédure :</dt>
  22.    <dd><input size="47" type="text" name="procname"></dd>
  23.    <dt>Paramètres :</dt>
  24.    <dd><textarea name="params" cols="40" rows="5"></textarea></dd>
  25.    <dd><input type="submit" value="Lancer la procédure"></dd>
  26.   </dl>
  27.  </form>
  28. <%
  29. Else
  30. ' Affichage des résultats
  31. Dim tabParams
  32. Dim tabParamNames()
  33. Dim tabParamVals()
  34. tabParams = Split(CStr(Request.Form("params" )), vbCrLf)
  35. Redim tabParamNames(UBound(tabParams))
  36. Redim tabParamVals(UBound(tabParams))
  37. Dim i
  38. For i = LBound(tabParams) to UBound(tabParams)
  39.  tabParamNames(i) = Trim(Left(tabParams(i), Instr(1, tabParams(i), "=" ) - 1))
  40.  tabParamVals(i) = Trim(Right(tabParams(i), Len(tabParams(i)) - Instr(1, tabParams(i), "=" )))
  41.  If tabParamVals(i) = "(null)" Then
  42.   tabParamVals(i) = null
  43.  End If
  44. Next
  45. Dim cnx
  46. Set cnx = Server.CreateObject("ADODB.Connection" )
  47. cnx.ConnectionString = "dsn=LE_DSN;user id=LOGIN;password=PASSWORD"
  48. cnx.Open
  49. Dim cmd
  50. Set cmd = Server.CreateObject("ADODB.Command" )
  51. Set cmd.ActiveConnection = cnx
  52. cmd.NamedParameters = True
  53. cmd.CommandText = Request.Form("procname" )
  54. cmd.CommandType = 4
  55. cmd.CommandTimeout = 0
  56. %>
  57.  <p>Paramètres reçus :</p>
  58.  <pre>
  59. <%
  60. Dim rs
  61. Set rs = Server.CreateObject("ADODB.RecordSet" )
  62. Set rs.ActiveConnection = cnx
  63. For i = LBound(tabParams) to UBound(tabParams)
  64.  rs.Open "select c.name, c.xtype, c.length from syscolumns c, sysobjects o where o.xtype = 'P' and o.name like '" & Request.Form("procname" ) & "' and c.id = o.id and c.name like '" & tabParamNames(i) & "'"
  65.  Response.Write tabParamNames(i) & " = "
  66.  If Not isNull(tabParamVals(i)) Then
  67.   Response.Write tabParamVals(i)
  68.  Else
  69.   Response.Write "(null)"
  70.  End If
  71.  If Not rs.EOF Then
  72.   If rs("xtype" ) = 56 Then
  73.    Response.Write " Int"
  74.    cmd.Parameters.Append cmd.CreateParameter(rs("name" ), 3, 1, rs("length" ), tabParamVals(i))
  75.   ElseIf rs("xtype" ) = 167 Then
  76.    Response.Write " VarChar"
  77.    cmd.Parameters.Append cmd.CreateParameter(rs("name" ), 200, 1, rs("length" ), tabParamVals(i))
  78.   ElseIf rs("xtype" ) = 61 Then
  79.    Response.Write " DateTime"
  80.    cmd.Parameters.Append cmd.CreateParameter(rs("name" ), 135, 1, rs("length" ), tabParamVals(i))
  81.   End If
  82.   Response.Write vbCrLf
  83.  Else
  84.   Response.Write " Inexistant =&gt; ignoré"
  85.  End If
  86.  rs.Close
  87. Next
  88. %>
  89.  </pre>
  90. <%
  91. Set rs = cmd.Execute
  92. %>
  93.  <table>
  94.   <tr>
  95. <%
  96. Dim el
  97. For Each el in rs.Fields
  98. %>
  99.    <th><%=el.Name%></th>
  100. <%
  101. Next
  102. %>
  103.   </tr>
  104. <%
  105. Dim cpt
  106. cpt = 0
  107. Do While Not rs.EOF
  108.  cpt = cpt + 1
  109.  If cpt <= 100 Then
  110. %>
  111.   <tr>
  112. <%
  113.   For Each el in rs.Fields
  114. %>
  115.    <td><%=el.Value%></td>
  116. <%
  117.   Next
  118. %>
  119.   </tr>
  120. <%
  121.  End If
  122.  rs.MoveNext
  123. Loop
  124. If cpt > 100 Then
  125. %>
  126.   <tr>
  127.    <th colspan="<%=rs.Fields.Count%>"><%=cpt%> &eacute;l&eacute; au total</th>
  128.   </tr>
  129. <%
  130. End If
  131. %>
  132.  </table>
  133.  <a href="procrunner.asp">Autre requête</a>
  134. <%
  135. rs.Close
  136. Set rs = Nothing
  137. Set cmd = Nothing
  138. cnx.Close
  139. Set cnx = Nothing
  140. End If
  141. fVal(1) = CSng( timer )
  142. %>
  143.  <p>Dur&eacute; totale : <%=(fVal(1) - fVal(0))%> secondes.</p>
  144. </body>
  145. </html>


 
Actuellement, elle utilise un DSN, on pourrait très bien modifier cette ligne pour passer par une connection OLE DB.
 
Si vous êtes intéressés pour faire la même page en d'autres langages / pour d'autres SGBD, ce serait intéressant de se constituer une petite librairie dans ce topic non ?

mood
Publicité
Posté le 21-07-2005 à 09:54:58  profilanswer
 

n°1155658
Arjuna
Aircraft Ident.: F-MBSD
Posté le 21-07-2005 à 11:04:53  profilanswer
 

J'aime bien, à chaque fois que je fais des topics "utiles", tout le monde s'en fout :spamafote:

n°1155865
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 21-07-2005 à 12:21:07  profilanswer
 

mais non bordel, c'est juste qu'il y a rien à dire de plus :o
j'ai quelques topics à toi dans mes favoris, spas pour ça que j'y ai posté hein


---------------
J'ai un string dans l'array (Paris Hilton)
n°1155869
Arjuna
Aircraft Ident.: F-MBSD
Posté le 21-07-2005 à 12:22:06  profilanswer
 

Ha, merci, ça fait plaisir :D


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  SGBD / ASP : Page tester des procédures stockées SQL Server depuis ASP

 

Sujets relatifs
Insertion d'une video dans une page web avec la validation W3C[NET][ASP.NET][C#] Lire fichier CSV en C#
Inserer objet Media Player dans une pageChanger le titre de page depuis flash
[ SQL ] Regrouper et sommer plusieurs lignes selon critèresConnaissez vous un site pour tester son site avec le moteur IE ?
prob comptage enregistrements SQLProblème de centrage page - css
[SQL]trigger simple avant insertionbrouillard: page precedente et variable
Plus de sujets relatifs à : SGBD / ASP : Page tester des procédures stockées SQL Server depuis ASP


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR