Avatar billede dingemann Novice
07. november 2006 - 18:33 Der er 12 kommentarer og
1 løsning

mySQL fra bunden

hej folkens.

Se jeg har aldrig leget specielt meget med database før men skal igang. På min uddannelse (inf) har jeg dog haft liiiidt om mySQL igennem Python og der fik jeg et teoretisk billede hvad det hele drejede sig om. Vi lavede nogle korte øvelser og copy/pasten gir faktisk mening hvor jeg oftest mener at database er noget temmeligt langhåret noget. Copy/Pasten er selvf. Python


def initDB ():
    dburl = "jdbc:mysql://ishtar.xxx.xx.dk/db-name"
    user = "username"
    pw = "xxxx"
    drv = "com.mysql.jdbc.Driver"
    db = sql.zxJDBC.connect(dburl, user, pw, drv)
    cursor = db.cursor()
    cursor.datahandler = sql.handler.MySQLDataHandler(cursor.datahandler)
    return cursor
#End Function


def addContact(dbCursor):
    newName = raw_input("fornavn > ")
    newSurename = raw_input("efternavn > ")
    newAddress = raw_input("adresse > ")
    newPhone = raw_input("telefonnummer > ")
    newEmail = raw_input("email > ")
    newDateOfBirth = raw_input("fødselsdag (ÅÅÅÅ-MM-DD) > ")
    dbCursor.execute ("INSERT INTO addressBook(firstname, lastname,address,phone,email,dateofbirth) VALUES ('"+newName + "','"+ newSurename +"','"+newAddress +"','"+newPhone+!','!+newMail+"','"+newDateOfBirth +"')")
        dbCursor.close()

#End Function


def UhlalalaSTartingThing(initDB):
    while 1:
        print "\n1: for at adde i databasen og 2 for noget andet og 3 for noget helt andet"
        cmd = raw_input("!! >")
        firstCmd = cmd.split{" "}[0]
       
        if firstCmd == "add":
            addContact(initDB)
        #End If
    #Loop
#End Function

----


def = funktioner og ellers er resten vidst læsebart - # er udkommenteret kode. Og for at forklare det kort så startes 'UhlalalaSTartingThing' et andet sted i koden som ikke er med her, men 'UhlalalaSTartingThing' er opstarten. Man får en prompt og hvis man i den skriver 'add' og trykker enter så eksekveres addContact. addContact tager en parameter med, 'dbCursor', som i det her tilfælde er 'initDB'. Dvs initDB bliver smidt med over i addContact så addContact kan eksekveres for til sidst at lukke databasen med en dbCursor.close()

Spørgsmålet er så om det er muligt at gøre noget lignende i ASP.NET (VB.NET) der kobler op til mySQL. Altså en initialisering af databasen med initDB der så sendes til, fx, addContact der bruger initDB som cursor for at udfører SQL'en...

Oooog husk: jeg er delvist grøn i det her så 'SQL-ord' bedes lige kort introduceres...



// peter
Avatar billede arne_v Ekspert
07. november 2006 - 18:44 #1
jeg har et par eksempler

desvaerre uden kommentarer, men jeg tror at du kan tyde dem
Avatar billede arne_v Ekspert
07. november 2006 - 18:44 #2
Imports System
Imports System.Data
Imports ByteFX.Data.MySqlClient

Class MainClass
    Public Shared Sub Main(ByVal args As String())
        Dim con As MySqlConnection = New MySqlConnection ("Database=Test;Data Source=localhost;User Id=;Password=")
        con.Open
        Dim sel As MySqlCommand = New MySqlCommand ("SELECT * FROM T1", con)
        Dim rdr As MySqlDataReader = sel.ExecuteReader
        While rdr.Read
            Dim f1 As Integer = rdr(0)
            Dim f2 As String = rdr(1)
            Console.WriteLine(f1 & " " & f2)
        End While
        rdr.Close
        con.Close
    End Sub
End Class
Avatar billede arne_v Ekspert
07. november 2006 - 18:45 #3
Imports System
Imports System.Drawing
Imports System.Windows.Forms
Imports MySql.Data.MySqlClient

Namespace DefaultNamespace
    Public Class MainForm
    Inherits Form
        Private con As MySqlConnection
        Private btnHent As Button
        Private rtbHent As RichTextBox
        Private btnGem As Button
        Private rtbGem As RichTextBox

        Public Sub New()
            InitializeComponent
            con = New MySqlConnection("Database=Test;Data Source=localhost;User Id=;Password=")
            con.Open
        End Sub

        <STAThread()> _
        Public Shared Sub Main(ByVal args As String())
            Application.Run(New MainForm)
        End Sub

        Private Sub InitializeComponent()
            rtbGem = New RichTextBox
            btnGem = New Button
            rtbHent = New RichTextBox
            btnHent = New Button
            SuspendLayout
            rtbGem.Location = New Point(25, 25)
            rtbGem.Name = "rtbGem"
            rtbGem.TabIndex = 0
            rtbGem.Text = ""
            btnGem.Location = New Point(175, 25)
            btnGem.Name = "btnGem"
            btnGem.TabIndex = 2
            btnGem.Text = "Gem i DB"
            AddHandler btnGem.Click, AddressOf BtnGemClick
            rtbHent.Location = New Point(25, 150)
            rtbHent.Name = "rtbHent"
            rtbHent.TabIndex = 1
            rtbHent.Text = ""
            btnHent.Location = New Point(175, 150)
            btnHent.Name = "btnHent"
            btnHent.TabIndex = 3
            btnHent.Text = "Hent fra DB"
            AddHandler btnHent.Click, AddressOf BtnHentClick
            AutoScaleBaseSize = New Size(5, 10)
            ClientSize = New Size(300, 275)
            Controls.Add(btnHent)
            Controls.Add(btnGem)
            Controls.Add(rtbHent)
            Controls.Add(rtbGem)
            Name = "MainForm"
            Text = "Gem og hent test"
            ResumeLayout(False)
        End Sub

        Sub BtnGemClick(ByVal sender As Object, ByVal e As System.EventArgs)
            Dim ins As MySqlCommand = New MySqlCommand("INSERT INTO rtftest VALUES(1,?RTFTXT)", con)
            ins.Parameters.Add(New MySqlParameter("?RTFTXT", rtbGem.Rtf))
            ins.ExecuteNonQuery
        End Sub

        Sub BtnHentClick(ByVal sender As Object, ByVal e As System.EventArgs)
            Dim sel As MySqlCommand = New MySqlCommand("SELECT rtf FROM rtftest WHERE id=1", con)
            Dim res As String = CType(sel.ExecuteScalar, String)
            rtbHent.Rtf = res
        End Sub
    End Class
End Namespace
Avatar billede coderdk Praktikant
07. november 2006 - 18:56 #4
arne_v's første eksempel bruger ByteFX: http://sourceforge.net/projects/mysqlnet/
Det andet bruger vist connector, er det rigtigt? http://mysql.com/products/connector/
Avatar billede arne_v Ekspert
07. november 2006 - 21:36 #5
Ja.

Men det er kun p.g.a. tidspunktet hvor de blev lavet.

ByteFX og MySQL Connector for .NET er det samme software !

Navne aendringen afspejler kun at ByteFX blev den officielle MySQL ADO.NET provider.

...
ByteFX 0.75
ByteFX 0.76
MySQL Connector for .NET 1.0.0
...
MySQL Connector for .NET 1.0.8

(man skal dog aendre namespace i sin kode - og parameter prefix)
Avatar billede dingemann Novice
10. november 2006 - 16:47 #6
nu har jeg prøvet nogle dage og leget lidt med det og kommet delvist videre. Jeg har downloadet MySQL-driverne fra mySQL's side og det virker fint på localhost men når jeg uploader til FTP'en der hoster sitet (og mySQL) så kommer der fejl i web.config præcis det sted hvor referencen til mySQL.dll-filen er angivet... hvordan kringles den?
Avatar billede coderdk Praktikant
10. november 2006 - 17:59 #7
MySQL Connector skal jo installeres på serveren for at du kan bruge den... Du kan muligvis nøjes med at uploade .dll'en til bin/ folderen, er dog ikke 100% :)
Avatar billede arne_v Ekspert
10. november 2006 - 18:17 #8
hvis du bruger den 1.x style så skal DLL bare op i bin dir
Avatar billede dingemann Novice
10. november 2006 - 19:54 #9
dejligt - det virker faktisk - det er jeg sgu ikke vant til
Avatar billede dingemann Novice
29. november 2006 - 18:03 #10
hvem vil btw ha point?
Avatar billede arne_v Ekspert
29. november 2006 - 18:10 #11
tjo
Avatar billede coderdk Praktikant
29. november 2006 - 18:30 #12
Ingen til mig, tak :)
Avatar billede dingemann Novice
26. januar 2007 - 20:29 #13
undskyld :) håber 'bedre sent end aldrig går'
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



IT-JOB

Danmarks Meteorologiske Institut

IT-operatør søges til DMI

Politiets Efterretningstjeneste

Netværks- og/eller firewallspecialister til PET

Udviklings- og Forenklingsstyrelsen

Business Analyst med flair for test

Udviklings- og Forenklingsstyrelsen

Data Scientist til stærkt data- og analysekontor