Avatar billede dehaas Nybegynder
07. november 2005 - 20:12 Der er 17 kommentarer og
1 løsning

database-hjælp

Hej,

Jeg har næsten ikke rodet med databaser før, men skal nu have lavet er program færdig, så hurtigt som muligt, hvor det skal bruges.

Det handler om MS Access Databaser

Jeg har brug for source-kode til følgende ting

- Oprette en tabel med 3 kolonner
- Læser disse data
- Ændre i disse data
Avatar billede arne_v Ekspert
07. november 2005 - 21:46 #1
jeg kan smide et par eksempler
Avatar billede arne_v Ekspert
07. november 2005 - 21:46 #2
Imports System
Imports System.Threading
Imports System.Data.OleDb

Class MainClass
    Public Shared Sub Main(ByVal args As String())
        Dim con As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Database\MSAccess\Test.mdb")
        con.Open
        Dim cre As OleDbCommand = New OleDbCommand("CREATE TABLE dtest (i INTEGER PRIMARY KEY, d DATETIME)", con)
        cre.ExecuteNonQuery
        Dim ins As OleDbCommand = New OleDbCommand("INSERT INTO dtest VALUES (?, ?)", con)
        ins.Parameters.Add("@i", OleDbType.Integer)
        ins.Parameters.Add("@d", OleDbType.Date)
        Dim i As Integer
        For i = 0 To 9
            ins.Parameters("@i").Value = i
            ins.Parameters("@d").Value = DateTime.Now
            ins.ExecuteNonQuery
            Thread.Sleep(1000)
        Next
        Console.WriteLine("All rows :")
        Dim sel As OleDbCommand = New OleDbCommand("SELECT * FROM dtest", con)
        Dim rdr As OleDbDataReader = sel.ExecuteReader
        While rdr.Read
            Dim iv As Integer = CType(rdr(0), Integer)
            Dim dv As DateTime = CType(rdr(1), DateTime)
            Console.WriteLine(iv & " " & dv)
        End While
        rdr.Close
        Console.WriteLine("Rows last 5 seconds since " + DateTime.Now + " :")
        Dim sel2 As OleDbCommand = New OleDbCommand("SELECT * FROM dtest WHERE d > ?", con)
        sel2.Parameters.Add("@d", OleDbType.Date)
        sel2.Parameters("@d").Value = DateTime.Now.AddSeconds(-5)
        Dim rdr2 As OleDbDataReader = sel2.ExecuteReader
        While rdr2.Read
            Dim iv As Integer = CType(rdr2(0), Integer)
            Dim dv As DateTime = CType(rdr2(1), DateTime)
            Console.WriteLine(iv & " " & dv)
        End While
        rdr2.Close
        Dim drp As OleDbCommand = New OleDbCommand("DROP TABLE dtest", con)
        drp.ExecuteNonQuery
        con.Close
    End Sub
End Class
Avatar billede arne_v Ekspert
07. november 2005 - 21:46 #3
Imports System
Imports System.IO
Imports System.Data
Imports System.Data.OleDb

Class MainClass

    Public Shared Sub Main(ByVal args As String())
        Dim con As OleDbConnection = New OleDbConnection ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Database\MSAccess\Test.mdb;User Id=admin;Password=")
        con.Open
        Dim cre As OleDbCommand = New OleDbCommand ("CREATE TABLE imgtest (id INTEGER PRIMARY KEY,img OLEObject)", con)
        cre.ExecuteNonQuery
        Dim imgfile As Stream = New FileStream ("C:\blue.jpg", FileMode.Open)
        Dim siz As Integer = imgfile.Length
        Dim imgdata(siz-1) As Byte
        imgfile.Read(imgdata, 0, imgdata.Length)
        imgfile.Close
        Dim ins As OleDbCommand = New OleDbCommand ("INSERT INTO imgtest VALUES(@id,@img)", con)
        ins.Parameters.Add("@id", OleDbType.Integer)
        ins.Parameters.Add("@img", OleDbType.VarBinary)
        ins.Parameters("@id").Value = 1
        ins.Parameters("@img").Value = imgdata
        ins.ExecuteNonQuery
        Dim sel As OleDbCommand = New OleDbCommand ("SELECT img FROM imgtest WHERE id = @id", con)
        sel.Parameters.Add("@id", OleDbType.Integer)
        sel.Parameters("@id").Value = 1
        Dim imgdata2 As Byte() = CType(sel.ExecuteScalar, Byte())
        Dim drp As OleDbCommand = New OleDbCommand ("DROP TABLE imgtest", con)
        drp.ExecuteNonQuery
        Dim imgfile2 As Stream = New FileStream ("C:\blue2.jpg", FileMode.Create)
        imgfile2.Write(imgdata2, 0, imgdata2.Length)
        imgfile2.Close
        con.Close
    End Sub
End Class
Avatar billede arne_v Ekspert
07. november 2005 - 21:47 #4
Imports System
Imports System.Data.OleDb

Class MainClass
    Public Shared Sub Main(ByVal args As String())
        Dim con As OleDbConnection = New OleDbConnection ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Database\MSAccess\Test.mdb;User Id=admin;Password=")
        con.Open
        Dim cmd As OleDbCommand = New OleDbCommand ("SELECT * FROM T1", con)
        Dim rdr As OleDbDataReader = cmd.ExecuteReader
        While rdr.Read
            Dim f1 As Integer = CType(rdr(0), Integer)
            Dim f2 As String = CType(rdr(1), String)
            Console.WriteLine(f1 & " " & f2)
        End While
        con.Close
    End Sub
End Class
Avatar billede dehaas Nybegynder
07. november 2005 - 21:58 #5
Har jo som sagt ikke rigtig arbejdet med det her før. Kan du ikke give en lille forklaring til hvert eksempel?
Avatar billede arne_v Ekspert
07. november 2005 - 22:20 #6
Kender du SQL ?
Avatar billede dehaas Nybegynder
08. november 2005 - 07:22 #7
Nej, heller ikke :S
Avatar billede arne_v Ekspert
08. november 2005 - 08:47 #8
så bliver du jo nok en lidt stor omgang
Avatar billede arne_v Ekspert
08. november 2005 - 08:48 #9
eksempel på SQL som opretter tabel:

CREATE TABLE t1 (f1 INTEGER PRIMARY KEY, f2 VARCHAR(50));
Avatar billede arne_v Ekspert
08. november 2005 - 08:49 #10
eksempel på SQL som indsætter række i tabel:

INSERT INTO t1 VALUES(1,'ABC');
Avatar billede arne_v Ekspert
08. november 2005 - 08:49 #11
eksempel på SQL som henter alle rækker ud af tabel:

SELECT * FROM t1;
Avatar billede arne_v Ekspert
08. november 2005 - 08:50 #12
Avatar billede arne_v Ekspert
08. november 2005 - 08:51 #13
tilbage til koden

        Dim con As OleDbConnection = New OleDbConnection ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Database\MSAccess\Test.mdb;User Id=admin;Password=")
        con.Open
        ' lave noget med databasen
        con.Close

opretter, åbner og lukker forbindelsen til databasen

[og du skal tilrette DBQ, UserId og Password til din database]
Avatar billede arne_v Ekspert
08. november 2005 - 08:55 #14
jeg tror at du skal ignorere mine 2 første kode eksempler (de lange) fordi de
bruger parameters - det er smart, men vent med det til du har lidt styr på det

du skal skelne mellem ting som opdaterer databasen og ting som kun henter fra databasen

en opdatering sker som:

        Dim cmd As OleDbCommand = New OleDbCommand ("INSERT INTO t1 VALUES(1,'ABC')", con)
        cmd.ExecuteNonQuery

hente data kan gøres som:

        Dim cmd As OleDbCommand = New OleDbCommand ("SELECT * FROM t1", con)
        Dim rdr As OleDbDataReader = cmd.ExecuteReader
        While rdr.Read
            Dim f1 As Integer = CType(rdr(0), Integer)
            Dim f2 As String = CType(rdr(1), String)
            ' brug f1 og f2
        End While
        rdr.Close

(stort set mit tredie lille eksempel)
Avatar billede dehaas Nybegynder
08. november 2005 - 13:35 #15
dine er artikler er rigtig gode, men virker dette kun til SQL-databaser?
Avatar billede arne_v Ekspert
08. november 2005 - 13:39 #16
ja

men Access, SQLServer, MySQL, PostgreSQL, Oracle, DB2 etc. er alle SQL databaser !

så du kan også bruge SQL mod Access

faktisk - skal du bruge SQL når du koder i VB.NET
Avatar billede arne_v Ekspert
31. december 2005 - 15:06 #17
Tid at få afsluttet her ?

og et svar fra mig
Avatar billede dehaas Nybegynder
16. juli 2006 - 15:36 #18
Naturligvis. Beklager ventetiden.
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
Kurser inden for grundlæggende programmering

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