Avatar billede morch Nybegynder
13. december 2004 - 08:13 Der er 6 kommentarer og
2 løsninger

Genbruge kode / funktioner / subs

Jeg er igang med at lære ASP.NET - primært VB, da det er dét, jeg er vant til, at programmere asp i.

Det går fremad, men jeg er lidt i tvivl om, hvordan jeg kan genbruge kode, der allerede ér lavet i et projekt / applikation.

Før lavede jeg en include fil med alle mine funktioner og subs i, men det skulle vist ikke længere være nødvendigt længere.
Jeg HAR været forbi en masse MSDN, diverse bøger og så videre og så videre.

Er der en, der kan forklare det på dansk, på en måde, selv jeg kan fatte?

Mvh

Morch :-)
Avatar billede arne_v Ekspert
13. december 2004 - 08:21 #1
Du kan builde et library = en assembly = en dll med dine genbrugelige
klasser, den smider du i bin dir og så skan alle dine sider bruge de klasser.
Avatar billede snepnet Nybegynder
13. december 2004 - 08:22 #2
et praktisk eksempel kunne være dette :

<%@ Page Language="C#" %>
<%@ assembly name="ByteFX.MySqlClient" %>
<%@ import Namespace="ByteFX.Data.MySqlClient" %>
<%@ import Namespace="System.Data" %>
<script runat="server">
    void Page_Load(object sender, EventArgs e) {
        MySqlConnection con = new MySqlConnection("Data Source=localhost;Database=xxx;User ID=yyy;Password=zzz;");
        MySqlCommand command = new MySqlCommand("select * from users", con);
        MySqlDataAdapter adapter = new MySqlDataAdapter(command);
        DataSet ds = new DataSet();
        adapter.Fill(ds);
        Response.Write(ds.GetXml());
    }
</script>
<html>
<head>
</head>
<body>
    <form runat="server">
    </form>
</body>
</html>
Avatar billede snepnet Nybegynder
13. december 2004 - 08:26 #3
hov - hej arne :o)

forklaring til eksemplet :

ByteFx er en genbrugelig komponent du kan bruge til at kommunikere med et MySql-database med.

Hvis du sørger for at lægge den i din binfolder kan du sørge for at der bliver "kigget i den" sådan her :
<%@ assembly name="ByteFX.MySqlClient" %>

For at slippe for at angive det fulde navn på de klasser du vil bruge fra denne assembly kan du sørge for at importere namespacet sådan her :
<%@ import Namespace="ByteFX.Data.MySqlClient" %>

Mvh
Avatar billede snepnet Nybegynder
13. december 2004 - 08:28 #4
altså.... "bytefx-klodsen" er bare et eksempel på en genbrugelig komponent. det kunne ligeså godt have været en du selv havde lavet ved at producere at library som arne skrev.

der er nogle praktiske forskelle på hvordan du gør det, afhængig af udviklingsværktøj.... bruger du visual studio eller ?

mvh
Avatar billede morch Nybegynder
13. december 2004 - 08:43 #5
Ok - Jeg har lavet en chat applikation, hvor fx. disse elementer indgår:

    Sub brugerlisteopdater()
        Dim i As Integer
        Dim User, xid, rid As String
        Dim Remove As ArrayList = New ArrayList
        Dim BrRum As Array

        Application.Set(Session("Name"), TimeOfDay)

        For i = 0 To Application.Count - 1
            If Application.GetKey(i) <> "Conversation" Then
                If DateDiff("s", Application(i), TimeOfDay) > 20 Then
                    Remove.Add(Application.GetKey(i))
                End If
            End If
        Next

        If Remove.Count > 0 Then
            Application.Lock()
            For Each User In Remove
                BrRum = Split(User, "Chat")
                brugerindogud(BrRum(0), BrRum(1))
                opdaterbrugerrum(BrRum(1))
                Application.Remove(User)
            Next
            Application.UnLock()
        End If
    End Sub
    Sub brugerindogud(ByVal rid, ByVal xid)
        Dim myConnection As String
        ' If the connection string is null, use a default.myConnection As String
        If myConnection = "" Then
            myConnection = "DRIVER={MySQL ODBC 3.51 Driver};SERVER=localhost;DATABASE=XXXXXXXXXXX;USER=XXXXXXXXXXX;PASSWORD=XXXXXXXXXXX; OPTION=3"
        End If
        Dim myConn As New OdbcConnection(myConnection)
        Dim myInsertQuery As String = "INSERT INTO chat (chatbesked,xid,tid,room) values ("
        myInsertQuery = myInsertQuery & "'" & findBrugereUd(xid) & " Har forladt chatten " & DatePart("d", Now) & "-" & DatePart("m", Now) & "-" & DatePart("yyyy", Now) & " kl. " & DatePart("h", Now) & ":" & DatePart("n", Now) & ":" & DatePart("s", Now) & "'"
        myInsertQuery = myInsertQuery & ",18,'" & DatePart("yyyy", Now) & "-" & DatePart("m", Now) & "-" & DatePart("d", Now) & "" & DatePart("h", Now) & ":" & DatePart("n", Now) & ":" & DatePart("s", Now)
        myInsertQuery = myInsertQuery & "'," & rid 'tal
        myInsertQuery = myInsertQuery & ")"
        'Response.Write(myInsertQuery)
        Dim myOdbcCommand As New OdbcCommand(myInsertQuery)
        myOdbcCommand.Connection = myConn
        myConn.Open()
        myOdbcCommand.ExecuteNonQuery()
        myOdbcCommand.Connection.Close()

    End Sub
    Sub opdaterbrugerrum(ByVal xid)
        Dim myConnection As String
        myConnection = "DRIVER={MySQL ODBC 3.51 Driver};SERVER=localhost;DATABASE=XXXXXXXXXXX;USER=XXXXXXXXXXX;PASSWORD=XXXXXXXXXXX; OPTION=3"
        Dim myConn As New OdbcConnection(myConnection)
        Dim myUpdateQuery As String = "UPDATE xxxxxx "
        myUpdateQuery = myUpdateQuery & "set FElt=0"
        myUpdateQuery = myUpdateQuery & " where xxx=" & xid
        Dim myOdbcCommand As New OdbcCommand(myUpdateQuery)
        myOdbcCommand.Connection = myConn
        myConn.Open()
        myOdbcCommand.ExecuteNonQuery()
        myOdbcCommand.Connection.Close()

    End Sub
    Function findBrugere(ByVal Bxid)
        Dim strConnection As String = "DRIVER={MySQL ODBC 3.51 Driver};SERVER=localhost;DATABASE=XXXXXXXXXXX;XXXXXXXXXXX=root;PASSWORD=XXXXXXXXXXX; OPTION=3"
        Dim objConnection As OdbcConnection = New OdbcConnection(strConnection)
        Dim brugernavn, gender, profil, fraBruger As String
        Dim antal, x As Integer
        Dim strSQL, s As String
        Bxid = Bxid.ToString
        Dim objCommand As OdbcCommand
        Dim objDataReader As OdbcDataReader
        objConnection.Open()
        strSQL = "Select xid,brugernavn,profil,gender, userlevel from brugere where xid = " & Bxid
        objCommand = New OdbcCommand(strSQL, objConnection)
        objDataReader = objCommand.ExecuteReader(CommandBehavior.CloseConnection)
        While objDataReader.Read()
              Bla.  Bla.  Bla.  Bla.  Bla.
        End While
        objDataReader.Close()
    End Function
    Function findBrugereUd(ByVal Bxid)
        Dim strConnection As String = "DRIVER={MySQL ODBC 3.51 Driver};SERVER=localhost;DATABASE=XXX;USER=XXXX;PASSWORD=XXXXXXXXXXX; OPTION=3"
        Dim objConnection As OdbcConnection = New OdbcConnection(strConnection)
        Dim brugernavn As String
        Dim strSQL, s As String
        Bxid = Bxid.ToString
        Dim objCommand As OdbcCommand
        Dim objDataReader As OdbcDataReader
        objConnection.Open()
        strSQL = "Select xid,xrugernavn,xrofil,xender from xxx where xid = " & Bxid
        objCommand = New OdbcCommand(strSQL, objConnection)
        objDataReader = objCommand.ExecuteReader(CommandBehavior.CloseConnection)
        While objDataReader.Read()
            findBrugereUd = objDataReader("brugernavn")
        End While
        objDataReader.Close()
    End Function


i en side ved navn chat.aspx

Jeg bruger VS .net 2003, så koden kompileres hver gang jeg gemmer.

Den starter således:

Public Class Chat
    Inherits System.Web.UI.Page

Vil det så sige, at jeg vil kunne genbruge disse elementer i andre sider i applikationen, ved at skrive <%@ import Namespace="Chat" %> 

?

Morch
Avatar billede morch Nybegynder
16. december 2004 - 02:19 #6
hmmmmmmmm
Avatar billede morch Nybegynder
16. december 2004 - 02:20 #7
hmmmmm det blev jeg ikke meget klogere af - tak.
Avatar billede snepnet Nybegynder
16. december 2004 - 17:42 #8
har ikke set du har skrevet - sorry.

hvis du bruger visual studio, og bruger miljøet til at oprette dine sider, vil de som udgangspunkt ligger i samme namespace.

hvis du vil lave kontroller til genbrug kan du enten oprette dig nogle usercontrols (giver dig en ascx-fil du kan lave dit layout i, og en code-behind fil).
sådanne kontroller kan du bare trække ind på siden i vs.

ellers kan du lave dig et regulært kontrolbibliotek (en projekttype du har mulighed for at vælge), og i det bygge nogle kontroller op i ren kode.
du vil kunne sætte dem op i din toolbox på samme måde som dem der ligger der i forvejen.

mvh
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