ASP.net - Eigene Klassen definieren

Private

Grünschnabel
Hallo zusammen

Ich bin ein Neuling in ASP.net, früher habe ich JAVA programmiert. Jetzt bin ich ein bisschen verwirrt:
In Java konnte man alle selbstefinierten Klassen im selben Ordner problemlos mit

Classname class = new Classname();

instanzieren. Wie ist das in ASP.net wenn die Klasse in einem anderen File ist? Muss man diese importieren? Was hat es mit Namespace und Using auf sich?

Wenn ich eine Klasse SQLConnection in einem File Connection.cs geschrieben habe und diese Klasse im File default.asp instanzieren möchte, wie macht man das?

SQLConnection conn = new SQLConnection();

funktioniert nicht da die Klasse nicht gefunden wird.

Gruss Private
 
Hallo.

Um Klassen zu strukturieren verwendet man in .net Namespaces. Ist sowas ähnliches wie in Java Packages sind.
Das using Statement ist dazu da, um einen Namespace so 'einzubinden' das man auf seine Klassen zugreifen kann, ohne den kompleten Namespace-"Baum" schreiben zu müssen.

Code:
entweder:
System.Console.WriteLine("Test");

oder:
using System;
Console.WriteLine("Test");

Benutzt du übrigens das Code Behind Modell, oder hast du den Code direkt in der aspx-Datei?
Bei CodeBehind, ist die Page-Klasse im selben Namespace wie die SQLConnection Klasse? Wenn nicht musst du mit Namespace auf die Klsse zugreifen, oder das using Statement verwenden.

Mfg,
Alex
 
Hallo & Danke für die rasche Antwort:

Der Code sieht so aus und ich möchte die Klasse Connection im default.aspx File benutzen:

File Connection.cs:
Code:
using System.Data.OleDb;

namespace Connection {
    using System;

    public class Connection {
        private string sHost;
        private string sDatabase;
        private string sProvider;
        private string sUser;
        private string sPassword;
        private OleDbConnection conn;


        public Connection(string sProvider, string sDataSource) {
            conn = new OleDbConnection("Provider=" + sProvider + ";Data Source=" + sDataSource + ";");
            Open();
        }

        public Connection(string sConnection) {
            conn = new OleDbConnection(sConnection);
            Open();
        }

        public OleDbCommand Query(string sQuery) {
            return new OleDbCommand(sQuery,conn);
        }

        public void Open() {
            conn.Open();
        }

        public void Close() {
            conn.Close();
        }
    }
}

File default.aspx:
Code:
<%@ Page Language="C#" Debug="true" %>
<%@ import Namespace="System.Data.OleDb" %>
<%@ import Namespace="System.Data" %>
<script runat="server">

    public void Page_Load(object sender, EventArgs e)
    {
        Connection conn = new Connection("Microsoft.Jet.OLEDB.4.0","Pfad zur DB");
        OleDbCommand cmd = conn.Query("Query");
        cmd.CommandType = CommandType.TableDirect;

        myDataGrid.DataSource = cmd.ExecuteReader();
        DataBind();
 }

</script>
<%@ import Namespace="System.Data" %>
<html>
<head>
</head>
<body>
    <p>
        <asp:DataGrid id="myDataGrid" runat="server"></asp:DataGrid>
    </p>
    <p>
        <asp:Label id="message" runat="server" width="492px">Label</asp:Label>
    </p>
</body>
</html>

// Alex: Bitte Code in Code-Tags setzen, danke. [ code ]using System;..[/ code] (Ohne die Leerzeichen)
 
Zuletzt bearbeitet von einem Moderator:
Entweder du setzt am Anfang der Datei noch ein
Code:
<%@ import Namespace="Connection" %>
hin, oder du Instanzierst deine Connection-Klasse mit

Code:
Connection.Connection conn = new Connection.Connection("Microsoft.Jet.OLEDB.4.0","Pfad zur DB");

Ich würde den Namespace übrigens anders benennen.
Und du könntest dir einen kleinen Namespace ausdenken, im dem der ganze Rest drinnen ist, wie z.B.: Firmen/Organisations Name oder dergleichen.
Damits irgendwann mal nicht zu einer Verwechslung kommen kann. Dies nur als kleiner Rat, hat nichts mit deinem Problem zu tun.
 
Das habe ich auch schon versucht...

Der Typ oder Namespace 'Connection' konnte nicht gefunden werden. Möglicherweise fehlt eine Anweisung oder ein Assemblyverweis.
 
Mh,
womit entwickelts du die Seite? Schreibst dus mit Notepad (oder ähnliches), oder verwendest du eine IDE?

Ohne IDE:
Du wirst die Connection.cs compilieren müssen, und die DLL ins bin Verzeichniss der WebApp geben müssen.
 
Hallo nocheinmal & nochmals Danke für die raschen Antworten:)

Wie ist denn das, wenn man auf dem Webserver kein Zugriff auf das Bin Verzeichnis hat und nicht mit der Konsole auf den Webserver zugreifen kann da man nur Zugriff auf ein Frontpage Subnet hat?

Gibts denn da trotzdem eine Lösung wie man mehrere Files mit verschiedenen Klassen nutzen kann? Ich meine gibts ne andere Möglichkeit? Anderer Aufbau? Mit Codebehind? Oder kann man die dll's auch einfach im Subweb ablegen? Wenn ich das .cs File in der Page-Direktive als Source angebe, dann brauche ich es ja nicht zu kompilieren?

Sorry die vielen Fragen, aber ich hab in keinem Buch was dazu gefunden. Ist es denn nicht üblich, dass man für jede Klasse ein eigenes File macht...? (Wie in Java)

Gruss Private
 
Hi, bitte gerne. ;)

Also, das bin Verzeichniss ist einfach ein Verzeichniss namens bin im Root-Verzeichniss deiner WebApplikation.
Ich weiss zwar nicht was du für einen Webspace hast aber wenns ein Packet ist mit ASP.net unterstüzung und ner Domain einfach ds /bin Verzeichniss erstellen sollte es dies nicht geben.

Meine ASP.net Seiten habe ich bisher immer mit VisualStudio entwickelt und verwendete immer das CodeBehind Model, von daher habe ich leider nicht so die Erfahrung mit "der anderen" Art.

Einführung: C#-Klassen in ASP.NET
Dort steht vielleicht mehr dazu, habe nicht alles gelesen.

Und, nein, es können mehrere Klassen in einer Datei sein, und die Dateien müssen auch nicht heissen wie die Klasse die darin ist.
Übrigens, in Java können auch mehrere Klassen in einer Datei sein, eine öffentliche nach der die Datei benannt ist, und der Rest privat. (Bzw. ohne Zugriffsmodifizier) Hab ich aus eigener Erfahrung. =)

// Alex
 

Neue Beiträge

Zurück