13. april 2008 - 16:24Der er
9 kommentarer og 1 løsning
Skrive data til .mdf i projektfolderen i en Windowsapplikation?
Når man tilføjer en .mdf database i en Windowsapplikation, så bliver den placeret i projektfolderen. Når man kører applikationen med F5, så bliver .mdf-filen i projektfolderen pr. default kopieret til bin folderen og det er .mdf-filen i bin folderen, som applikationen kommunikerer med. Dette understøttes af, at forbindelsesstrengen:
Data Source=.\SQLExpress;Integrated Security=True;User Instance=True;AttachDBFilename=|DataDirectory|DB.mdf
via AttachDBFilename=|DataDirectory| peger på det bibliotek, hvor .exe-filen afvikles.
Så langt, så godt, men mit spørgsmål er nu: hvordan bærer man sig ad med at kommunikere data med .mdf-filen i PROJEKTmappen? Så vidt jeg kan se, så 'nulstilles' .mdf-filen i bin folderen hver gang man trykker F5 (eller rettere må den blive overskrevet af den tomme .mdf i projektmappen).
Det er muligt at sætte en property (Copy to Output Directory) på databasen via Visual Studio. Du kan sætte propertien til henholdsvis "Do not copy", "Copy always" (default) samt "Copy if newer".
Jeg vil tro at du ved at sætte properties til "Do not copy" eller "Copy if newer" vil klare dit problem.
arne_v -> når jeg siger Imports System.Configuration, så meddeles, at ConfigurationManager ikke er declared?
tomledk -> hvis jeg sætter den til Do not copy, så får jeg fejlen: System.Data.SqlClient.SqlException was unhandled Class=14 ErrorCode=-2146232060 LineNumber=65536 Message="An attempt to attach an auto-named database for file C:\2. Kims data - applikationsudvikling\WinApp\RS2010\RS2010\bin\Debug\RS2010.mdf failed. A database with the same name exists, or specified file cannot be opened, or it is located on UNC share."
Der er på dette tidspunkt ingen database i bin/debug under projektmappen.
Når man trykker F5 første gang, så kopieres databasen ned i bin/debug og det er den, man laver ændringer i under programafprøvningen og det virker lige indtil man stopper debug.
Næste gang man trykker F5 kopieres databasen fra projektbiblioteket (der jo er tom) til bin/debug og så en man for mig at se, tilbage ved Adam og Eva (man kan så sige Do not copy, men ifølge ovenstående giver det fejl).
Hvad er konceptet i, at man kopierer en database fra projektbiblioteket til arbejdsbiblioteket (bin/debug), når man ikke arbejder med data i projektbiblioteket? Jeg synes, det er mærkeligt eller også - og det er det jo sikkert - har jeg helt misset noget....!
Nu har jeg ’cyklet’ lidt rundt i det her og jeg tror, at jeg ser konceptet mere klart nu.
Den .mdf man har i projektfolderen er at betragte som en slags master, som man starter med hver gang man kører programmet. Dette er typisk en eller flere tabelstrukturer. Hvis man ønsker at starte med en tabel med data, så kan man – som arne_v allerede har nævnt – indsætte en sti i app.config/ RS2010.exe.config, der peger mod .mdf i projektfolderen. På den måde ændrer man sine startdata hver gang man trykker F5. Efter denne opdatering af data, sættes stien i app.config/ RS2010.exe.config igen til bin-folderen med:
AttachDbFilename=|DataDirectory|\Database1.mdf
Angående app.config og RS2010.exe.config, så er de som udgangspunkt helt ens, idet indholdet af app.config kopieres til RS2010.exe.config første gang, der trykkes F5. Herefter kan man rette i RS2010.exe.config uden at der kopieres fra app.config, men hvis der rettes i app.config, så overskrives RS2010.exe.config.
At bruge Do not copy til .mdf i projektfolder giver nu ikke fejl som i første omgang, men det afstedkommer, at der ikke bliver ’fødet’ data til bin-folderen og derfor vil et forsøg på at tilgå data, give en fejl.
Disse noter blot skrevet som uddybning af de forklaringer, som arne_v egentlig allerede har givet, men som jeg ikke i første omgang helt kunne følge konceptet i.
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.