[ASP] CSV cynchroniseren met MSSQL

Pagina: 1
Acties:

  • Polderdijk
  • Registratie: December 2001
  • Laatst online: 30-04 21:10
Ik heb een 4-tal tabellen in een Microsoft SQL server staan. Deze 4 tabellen dienen elke dag gecynchroniseerd te worden met een 14-tal CSV bestanden. De CSV bestanden staan op een externe server en deze download ik eerst naar mijn eigen server om ze daarna verder te verwerken.

Eerst open ik de 1e CSV en zorg dat ik deze eerst in een array stopt door de .csv in te lezen en met een Split op Chr(10) te doen. Nu krijg ik dus weer apparte regels welke ik dus d.m.v. een loop in de database wil toevoegen, of indien het id al bestaat, de gegevens updaten. Alvorens het in de database wordt gezet, worden er nog een aantal functies op losgelaten om het juiste 'formaat' te krijgen.

Hiervoor heb ik onderstaande script voor geschreven:
ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
splRegel = Split(SQLspl(x), ";")
RTId = splRegel(0)
Titel = QuoteWeg(Replace(splRegel(1), "'", "''"))
Datum = DatumOmdraaien(QuoteWeg(splRegel(2)))
Category = QuoteWeg(splRegel(3))
Ranking = QuoteWeg(splRegel(4))
Equivalent = QuoteWeg(splRegel(5))

LeesDB "SELECT * FROM Ringtone WHERE OrderNr = '" & RTId & "'"
Records = RS.RecordCount
LeesDBClose

If Records = 0 Then
    WijzigDB "Ringtone"
    RS.AddNew
    Nieuw = Nieuw + 1
    TotaalNieuw = TotaalNieuw + 1
Else
    WijzigDB "Ringtone WHERE OrderNr = '" & RTId & "'"
End If
RS.Fields("OrderNr") = RTId
RS.Fields("Titel") = Titel
RS.Fields("Datum") = Datum
RS.Fields("Category") = Category
RS.Fields("Ranking") = Ranking
RS.Fields("Equivalent") = Equivalent
RS.Update
WijzigDBClose
Bovenstaande code gaat opzich goed, alleen heb ik zelf het idee dat het zoiezo erg lang duurt (op het moment 11839 record doet hij 138 seconde over), maar ik heb het idee dat er veel makkelijkere methoden voor zijn om dit op te lossen.

Heeft iemand misschien hier een goed idee voor om dit wat efficienter te maken?

Webhosting van SkyHost.nl: 25 Mb / 1 Gb windows hosting € 4,50 p/m excl.btw!


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Heb je wel eens naar DTS gekeken? Dat lijkt me hier precies geschikt voor

http://www.microsoft.com/...ion/features/datatran.asp

Oops! Google Chrome could not find www.rijks%20museum.nl


  • Polderdijk
  • Registratie: December 2001
  • Laatst online: 30-04 21:10
Bedankt voor de link! Hier had ik i.d.d. nog nooit van gehoord.

Heb het net even heel vluchtig doorgelezen, zal er straks eens goed naar kijken of er mogelijkheden zijn die ik met dat pakket kan gebruiken.

Webhosting van SkyHost.nl: 25 Mb / 1 Gb windows hosting € 4,50 p/m excl.btw!


  • xtra
  • Registratie: November 2001
  • Laatst online: 19-11-2025
CSV kun je eventueel ook met ADO openen. Dan kun je met een recordset werken. Bovendien heb je geen last van gequote tekst.

Zelf heb ik iets gemaakt waarbij ik eerst het CSV-bestand kopieer naar een tijdelijke tabel in MS SQL. Daarna laat ik er een procedure op los die (in drie stappen) de synchronisatie verzorgt.
Eerst de verwijderde verwijderen, dan de nieuwe toevoegen en uiteindelijk de bestaande updaten. (of een andere volgorde.)

  • Polderdijk
  • Registratie: December 2001
  • Laatst online: 30-04 21:10
Ja dat heb ik ook al geprobeerd om met ADO te openen, maar ik kwam daar wel het één en ander aan probleempjes tegen (wat weet ik helaas niet meer).

Gelukkig hoef ik niet te controleren op verwijderde record, dit omdat er ipc geen ringtones verwijderd worden, alleen maar toegevoegd. Indien hij in de databse al zit, moet deze wel geupdate worden i.v.m. de ranking van de ringtone. Ook zitten er nog een zootje meer kolommen in (hot or not etc.). Dus ik kan niet alles weggooien en daarna opnieuw inlezen helaas.

Maar opzich is 138 seconde nog wel een goede prestatie, dus ik zit er over te denken om het gewoon lekker zo te laten, want nu werkt het iig goed :)

Webhosting van SkyHost.nl: 25 Mb / 1 Gb windows hosting € 4,50 p/m excl.btw!