Quand la base de donnée devient trop grosse, le transfert par FTP devient dissuasif. Sans compter que la base de données est bloquée pendant le transfert.
Méthodes utilisées (détaillées plus loin) :
» SQL = "update SUBJECT1 set SUBJECT=?, MAJ=0, I=0 where S1=?"
» SQL = "update SUBJECT1 set SUBJECT=?, MAJ=2 where S1=?"
» SQL = "update SUBJECT1 set MAJ=3 where S1=?"
» WebClient WC = new WebClient();
1)
» String SQL =
» » "select" +
» » " S1," +
» » " SUBJECT," +
» » " MAJ " +
» » "from" +
» » " SUBJECT1 " +
» » "where" +
» » " MAJ=0 or MAJ=2 or MAJ=3";
» XmlDocument DOM = IT.ADO2DOM(MDB,SQL,0);
» int I = DOM.DocumentElement.ChildNodes.Count;
» if (I==0)
» {
» » Response.Write("<td align='center' width='20%'>-</td>");
» }
» else
» {
2)
» » try
» » {
» » » byte[] DS = Encoding.GetEncoding(1252).GetBytes(DOM.InnerXml);
» » » byte[] DR = WC.UploadData("http://guimberteau.name/????????.aspx?table=subject1",DS);
» » » S = Encoding.GetEncoding(1252).GetString(DR);
» » }
» » catch (Exception E)
» » {
» » » S = E.Message;
» » }
3)
» » if (S==I.ToString())
» » {
» » » Response.Write("<td align='center' width='20%'>"+S+"</td>");
4)
» » » ODCom.CommandText = "update SUBJECT1 set MAJ=1 where MAJ=0 or MAJ=2";
» » » ODCom.ExecuteNonQuery();
» » » ODCom.CommandText = "delete from SUBJECT1 where MAJ=3";
» » » ODCom.ExecuteNonQuery();
» » }
» » else
» » {
» » » Response.Write("<td width='20%'>"+S+"</td>");
» » }
» }
ADO2DOM est une procédure maison pour convertir un RecordSet ADO en XML.
1)
» DOM.Load(Request.InputStream)
2)
» For Each Record In DOM.DocumentElement.ChildNodes
» » MajSubject1(Record)
» Next
.
.
.
» Sub MajSubject1(Record)
» » Dim S1 As String = Record.ChildNodes.Item(0).InnerText
» » Dim SUBJECT As String = Record.ChildNodes.Item(1).InnerText
» » Dim MAJ As String = Record.ChildNodes.Item(2).InnerText
» » SQL = _
» » » "select" & _
» » » " * " & _
» » » "from" & _
» » » " SUBJECT1 " & _
» » » "where" & _
» » » " S1=?"
» » ODDA.SelectCommand = New OleDbCommand(SQL,ODCon)
» » ODDA.SelectCommand.Parameters.Add("@S1",OleDbType.Smallint,2,"S1").Value = S1
» » DS = New DataSet
» » ODDA.Fill(DS)
» » If DS.Tables(0).Rows.Count=0 Then
» » » ODCom.CommandText = "insert into SUBJECT1(S1,I) values(" & S1 & ",0)"
» » » ODCom.ExecuteNonQuery
» » » DS = New DataSet
» » » ODDA.Fill(DS)
» » End If
» » With DS.Tables(0).Rows(0)
» » » .Item("SUBJECT") = SUBJECT
» » » .Item("MAJ") = MAJ
» » End With
» » SQL = _
» » » "update" & _
» » » " SUBJECT1 " & _
» » » "set" & _
» » » " SUBJECT=?," & _
» » » " MAJ=? " & _
» » » "where" & _
» » » " S1=?"
» » ODDA.UpdateCommand = New OleDbCommand(SQL,ODCon)
» » ODDA.UpdateCommand.Parameters.Add("@Subject",OleDbType.VarChar,20,"Subject")
» » ODDA.UpdateCommand.Parameters.Add("@Maj",OleDbType.TinyInt,1,"Maj")
» » ODDA.UpdateCommand.Parameters.Add("@S1",OleDbType.Smallint,2,"S1")
» » ODDA.Update(DS)
» End Sub
.
.
.
3)
» ODCom.CommandText = "update SUBJECT1 set MAJ=1 where MAJ=0 or MAJ=2"
» ODCom.ExecuteNonQuery
4)
» ODCom.CommandText = "delete from SUBJECT1 where MAJ=3"
» ODCom.ExecuteNonQuery
5)
» Response.Write(DOM.DocumentElement.ChildNodes.Count)
Avant de commencer à traiter la demande, vérification de l'adresse IP du demandeur ;-)
<%@ Import Namespace="System.Net" %>
<%
» Dim RH As String = Request.ServerVariables("REMOTE_HOST")
» Dim IPHE As IPHostEntry = Dns.GetHostByName("????????.???")
» If RH<>IPHE.AddressList(0).ToString Then
» » Response.End
» End If
%>