VB.NET Datenbankzugriff aus ASP.NET heraus
TobiasM
- sonstiges
Hallo,
ich versuche gerade aus einer ASP.NET Seite heraus in eine Datenbank zu schreiben (Mit VB.NET). Hier der Code:
<%@ Page Language="VB" %>
<%@ Import Namespace="System.Drawing" %>
<%@ Import Namespace="System.Drawing.Imaging" %>
<%@ Import Namespace="System.Drawing.Drawing2D" %>
<%@ Import Namespace="System.Data.OleDb" %>
<%@ Import Namespace="System.IO" %>
<script language="VB" runat="server">
Imports System.Data.OleDB
Sub Page_Load(sender As Object, e As EventArgs)
Private dbpath As String = System.IO.Path.Combine(Application.StartupPath, "UserDB.mdb")
Private conn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & dbpath & ";")
Private sql As String = "SELECT * FROM Users;"
Private cmd As New OleDbCommand(sql, conn)
Private da As New OleDbDataAdapter(cmd)
Private ds As New DataSet
Dim cb As OleDbCommandBuilder = New OleDbCommandBuilder(da)
conn.Open()
Dim row As DataRow = ds.Tables("Users").NewRow
row("Username") = "XX"
row("Passwort") = "sa"
row("Email") = "sdasd"
row("Datum") = DateTime.Now.ToShortDateString
ds.Tables("Users").Rows.Add(row)
da.Update(ds, "Users")
conn.Close()
End Sub
</script>
Doch irgendwie funktioniert das nicht. Kann mir jemand sagen warum ?
(Habe bisher nur sehr wenig Erfahrung mit .NET, bisher machte ich alles mit ASP)
Danke,
mfg Tobias
Hoi,
Doch irgendwie funktioniert das nicht. Kann mir jemand sagen warum ?
Was funktioniert nicht?
Eine genauere Problembeschreibung (Fehlermeldung) verkürzt mir und anderen die Zeit, dir helfend zu antworten.
Wenn ich dem Ablauf deines VB-Codes folge, erzeugst du mit
Private ds As New DataSet
ein völlig leeres (ohne eine Table "Users") Dataset
dann versuchst du eine neue Row für die nicht vorhandene Tabelle Users zu erzeugen
Dim row As DataRow = ds.Tables("Users").NewRow
schlägt es da bereits fehl?
Was du imho vergessen hast: Du solltest (wenn du willst) erstmal die Daten von der DB mit dem OleDbDataAdapter in das Dataset laden
Dim cb As OleDbCommandBuilder = New OleDbCommandBuilder(da)
conn.Open()
sollte werden zu
Dim cb As OleDbCommandBuilder = New OleDbCommandBuilder(da)
da.Fill(ds)
ein "conn.Open()" brauchst du afaik nicht explizit schreiben, das macht der DataAdapter schon alleine, aber falsch ist es trotzdem nicht
Durch das .Fill wird implizit die Tabelle "Users" mit dem Schema von "Users" aus der DB in deinem leeren Dataset erzeugt. Danach kannst du die Tabelle dann benutzen (Rows hinzufügen, löschen, ändern, wasauchimmer). Der OleDbCommandBuilder stellt dann bei Bedarf die richtigen SQL Statements zur Verfügung wenn du da.Update(ds) aufrufst.
Wozu "row("Datum") = DateTime.Now.ToShortDateString" ?
Ist deine Spalte Datum in der DB nicht vom Typ DateTime?
SELECT *
ist ebenfalls nicht empfehlenswert, da so das Subsystem selbst erst die MetaDaten für Spaltennamen etc herausfinden muss (wie viele es gibt etc)
Und du bist dir ausserdem sicher, dass
Private dbpath As String = System.IO.Path.Combine(Application.StartupPath, "UserDB.mdb")
auch auf eine existierende Datei zeigt?
Adios,
Frank