Gå til innhold

Lage en slags database.. Provide string, get value


Anbefalte innlegg

Skrevet (endret)

Altså, finnes det en DLL eller noe som fungerer på lik måte som registeret i windows?

 

Altså, man gir en string til DLLen, og den returnerer verdien for den stringen, akkurat som verdien for en registernøkkel :)

 

Noe lignendes en SQL database kanskje?

Men jeg tenkte på å ha det i en simpel fil... Finnes det noe slikt?

 

edit: SQLite kanskje? Den bruker jo en flatfil, og krever ingen server kjørendes... Men hvordan implementere i vb.net?

Endret av Wubbable
Videoannonse
Annonse
Skrevet

Hvis du vil gjøre det selv.... oversett dette til VB.

Hashtable table = new Hashtable();
table["key"] = "bla"

// Store
Stream s = File.Open("register.bin", FileMode.Create, FileAccess.ReadWrite);
BinaryFormatter b = new BinaryFormatter();
b.Serialize(s, table);
s.Close();      

// Recover
s = File.Open("register.bin", FileMode.Open, FileAccess.Read);
BinaryFormatter b = new BinaryFormatter();
table = (Hashtable) b.Deserialize(s);

Skrevet

Du kan jo sende inn en klasse som data. En Hashtable består av key (som må være "sammenlignbar") og "object data". Denne dataen kan helt fint være en klasse eller en struct.

Skrevet
Altså, finnes det en DLL eller noe som fungerer på lik måte som registeret i windows?

 

Altså, man gir en string til DLLen, og den returnerer verdien for den stringen, akkurat som verdien for en registernøkkel :)

 

Noe lignendes en SQL database kanskje?

Men jeg tenkte på å ha det i en simpel fil... Finnes det noe slikt?

 

edit: SQLite kanskje? Den bruker jo en flatfil, og krever ingen server kjørendes... Men hvordan implementere i vb.net?

8802730[/snapback]

Heisan

 

Dropp SQL Lite. Det du vil ha til gjør du super enkelt med å streame til en ASCII fil. Det er flere tråder her og på Visual Basic forumet som forteller hvordan du streamer en fil.

Det du trenger i tillegg er en liste med nøkkelverdi. Listen definerer du enkelt slik:

NB! Sitter ikke med Visual Studio akkurat nå så følgende kode er ufullstendig:

dim Liste as new Sortedlist(of STRING, STRING)

Så fyller du denne lista med data fra tekst filen. Bruk kommandoen SPLIT for å ha både søkebgrep og resultatet i samme tekst streng.

' Til fil
for each record as keypairvalue(of String, String) in Liste
 StringToWrite = Record.Key & chr(9) & Record.Item
 SkrivStrengTilFil()
End for

' Fra fil - dette er subrutinen som behandler alle postene og må kalles fra loopen msom streamer fila
sub HandleRecord(Record as String)
 dim array as string() = split(Record,chr(9))
 Liste.add(Array[1], Array[2])
End sub

denne koden er tatt ut fra løse luften og inneholder lite gyldig syntax, men bør gi deg en god pekepinn på hvordan du leser fra og til fila.

Slik leser du listen

SvarsStreng = Liste('Søkestreng')

Håper du får noe ut av dette, hvis ikek så er det bare å spørre

Skrevet (endret)

public struct MineData
   {
       public string name;
       public string address;
   }

Først som sist: Ok, skyt meg fordi jeg gjør det enkelt, og ikke bruker get/set ;)

 

Så blir koden noe som dette, for å adde i en hastTable:

 

Hasttable ht = new Hashtable();

string key = "Dette skal den sorteres på. Og denne verdien skal jeg hente ut ved hjelp av";

MineData personalia;

personalia.name = "Manfred";
personalia.address = "Min adresse";

ht.Add(key, personalia);

Og for å hente ut:

Response.Write(((MineData)ht[key]).name); //For å printe navn, f.ex.

Endret av Manfred
Skrevet (endret)

Imports System.IO
Imports system.Runtime.Serialization.Formatters.Binary

Public Class MF

   Private RegFile As String = "D:\Visual Basic\MusiX\MusiX\bin\Release\MXDB"

   <System.Serializable()> Private Structure VSTR
       Public V1 As String
       Public V2 As String
   End Structure

   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

       Dim table As Hashtable = New Hashtable()

       Dim VSCon As New VSTR
       VSCon.V1 = "value v1"
       VSCon.V2 = "value v2"

       table("Testkey") = VSCon

       ' Store
       Dim Str As Stream = File.Open(RegFile, FileMode.Create, FileAccess.ReadWrite, FileShare.Read)
       Dim BFS As BinaryFormatter = New BinaryFormatter()
       BFS.Serialize(Str, table)
       Str.Close()
       Str.Dispose()

       ' Recover
       Str = File.Open(RegFile, FileMode.Open, FileAccess.Read, FileShare.Read)
       Dim BFR As BinaryFormatter = New BinaryFormatter()
       table = CType(BFR.Deserialize(Str), Hashtable)
       Str.Close()
       Str.Dispose()

       TextBox1.Text = table.Item(?) 'HJELP :P
       TextBox2.Text = table.Item(?) 'HJELP :P

   End Sub

End Class

 

Har dette nå... Men hvordan henter jeg ut de forskjellige verdiene til hver sin textbox?

 

Edit: Fant det ut :p

 

VSCon = table.Item("Testkey")
TextBox1.Text = VSCon.V1
TextBox2.Text = VSCon.V2

Endret av Wubbable
Skrevet

Synes nå dette var en tungvint måte å gjøre det på.

 

Jeg bruker Resourcefiler til dette formålet.

 

Da kan du hente ut en verdi ved å skrive Resources.Navnpåfil.NavnpåVerdi, f.eks. Resources.Errormsg.Filenotfound.

 

Da har du også støtte for å ha flere språkfiler og la .NET automagisk hente ut verdier fra den filen med brukerens språk.

Skrevet
Fordelen med dette, med binære filer, fremfor recource-filer, er at disse enkelt kan leses med det blotte øye, da de er i xml-format.

8832584[/snapback]

 

Interesting! :)

 

Sånn til små webprosjekter og slikt så synes jeg Resourcefiler er greit, men skal ha dette i bakhodet dersom jeg skal programmere litt større prosjekter.

Skrevet

Når det kommer til binære filer, så må man jo vite nøyaktig hva slags datastruktur som ble skrevet til filen, ellers får man jo ikke noe fornuftig når man prøver å lese fra den ;)

 

Når det kommer til web-prosjekter, så er vel IIS lagt opp slik at man ikke får lest eller lastet ned Recource-fila, så det er ikke et så stort problem, men når man kommer til applikasjoner kan det være en klar fordel.

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...