Avatar billede Kim Neesgaard Seniormester
13. april 2008 - 16:24 Der 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).

Hvordan håndteres dette?
Avatar billede arne_v Ekspert
13. april 2008 - 17:13 #1
Lig en MDF udenfor projektet og tilgaa den med en absolut path (angivet i config ).
Avatar billede Kim Neesgaard Seniormester
13. april 2008 - 17:21 #2
Bedst i hvilket bibliotek?

Hvad så når applikationen skal deployes? Så vil man vel gerne, at den peger på det bibliotek, hvor .exe filen er?
Avatar billede arne_v Ekspert
13. april 2008 - 18:26 #3
Hvis du henter placeringen fra en config fil, så har du fuld fleksibilitet.

Bemærk at . ikke er placeringen af EXE filen men current dir og at det kan være forskelligt.
Avatar billede Kim Neesgaard Seniormester
13. april 2008 - 18:42 #4
Ok - i en web vil man hente den fra web.config sådan:

Constr = ConfigurationManager.ConnectionStrings("LocalSqlServer").ConnectionString
Conn = New Data.SqlClient.SqlConnection(Constr)
Conn.Open()

men det er vist kun web - hvad er syntaxen i Windows for det?
Avatar billede tomledk Nybegynder
13. april 2008 - 20:08 #5
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.
Avatar billede arne_v Ekspert
14. april 2008 - 00:36 #6
ConfigurationManager er ikke web specifik - du har web.config for web apps men
app.config (xxxx.exe.config).
Avatar billede Kim Neesgaard Seniormester
14. april 2008 - 11:11 #7
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."
Avatar billede Kim Neesgaard Seniormester
17. april 2008 - 18:20 #8
Nu har jeg støvet igennem et hav af artikler på nettet, men jeg kan ikke forstå dette koncept!

Når man opretter et Windowsprojekt og en database, så indlægges databasefilen i PROJEKTbiblioteket og i app.config indsættes automatisk:

connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True"
            providerName="System.Data.SqlClient"

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....!
Avatar billede Kim Neesgaard Seniormester
15. maj 2008 - 13:08 #9
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.

arne_v -> vil du lægge et svar?
Avatar billede arne_v Ekspert
16. maj 2008 - 00:26 #10
kommer her
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester