12. oktober 2003 - 19:39Der er
25 kommentarer og 1 løsning
Ændring af data i alle rækker i én kolonne i en database
Jeg har en tabel (Billeder), hvor der er oprettet en kolonne (FilPlacering), som angiver stien på harddisken, hvor alle de filer/billeder der er placeret i denne tabel ligger (eks. C:\\Galleri\Fodboldkamp\Mål.jpg). Denne sti er den samme for alle billeder, men filnavnene er naturligvis forskellige (Mål.jpg er bare én af filerne/billederne i tabellen). Når jeg i min ASP.NET-applikation vil ændre mappenavnet "Fodboldkamp" til et hvilket som helst andet navn (hvilket ikke er noget problem), ønsker jeg samtidigt at ændre dataene i databasen, så "FilPlaceringen" passer til den nye mappe på harddisken.
Nu kommer spørgsmålet:
Hvordan ændrer jeg den lille del af teksten i alle rækkerne til kolonnen "FilPlacering", der i ovenstående eksempel er "Fodbold". Hvis nu den nye mappe hvor billederne er flyttet over i (på harddisken) kaldes "Håndbold", hvordan får jeg så ændret alle dataene i databasen, så det passer til stien til denne nye mappe, og stadig har alle filerne/billednavnene (eks. Mål.jpg samt flere andre)stående til sidst i FilPlaceringen ? Sagt med andre ord - FilPlaceringen skal nu hedde C:\\Galleri\Håndboldkamp\Mål.jpg (her er "Fodboldkamp" byttet ud med "Håndboldkamp"). Dette skal gælde for alle de filer/billeder der ligger i denne tabel.
Jeg håber det er forståeligt, for det er lidt kompliceret at forklare. Jeg håber der er én der kan hjælpe ! På forhånd tak.
UPDATE tabelnavn SET feltnavn=REPLACE(feltnavn,'Fodboldkamp','Håndbåldkamp');
Den vil muligvis være OK, hvis der kun er én række i tabellen som skal ændres, men ikke når der er flere ! Er man så nødt til, at hente hver en række fra databasen én ad gangen, og derefter igen gemme dem med den nye sti én ad gangen ? Jeg havde håbet på en simpel SQL-kommando, der ville kunne ændre alle rækker på én gang !
UPDATE tabelnavn SET feltnavn=REPLACE(feltnavn,'Fodboldkamp','Håndbåldkamp');
"feltnavn" er jo forskelligt fra række til række, da hver fil/billede selvfølelig har et unikt navn. Derfor mener jeg, at den ikke vil virke, når der er flere rækker. Jeg formoder "feltnavn" skal være ens i alle rækker, for at denne SQL-kommando kan fungere ?
Det driller ! Første argument er ikke korrekt (det er den kedelige tilbagemelding man får, når man kører applikationen). Kan det være fordi, at teksten/mappenavnet "Fodboldkamp" ligger midt inde i stinavnet ? Jeg ved snart ikke. Jeg synes jeg har prøvet alt (næsten).
Her er lidt af koden, som naturligvis ikke kører som den står her ! Men du kan da se SQL-kommandoen, og måske ud fra denne se hvad problemet måtte være.
public string ændreKatalogNavn(string xGammeltKatalogNavn, string xNytKatalogNavn) {
Unhandled Exception: System.Data.SqlClient.SqlException: Argument data type text is invalid for argument 1 of replace function. at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
Hvorfor bruger du TEXT til det fekt ?
VARCHAR håndterer op til 8000 tegn (TEXT op til 2 GB).
VARCHAR burde være rigeligt til fil-stier (og af froskellige tekniske årsager performer VARCHAR bedre end TEXT).
Det virker. Du er sgu for hård ! Tak for hjælpen.........
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.