WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   ASP.Net und Datenbankzugriff (http://www.wcm.at/forum/showthread.php?t=169494)

webwurm 09.07.2005 09:13

ASP.Net und Datenbankzugriff
 
Hallo liebe WCM-Gemeinde,
ich habe hier ein großes Problem mit meinem Webspace-Provider, und vielleicht könnt ihr mit helfen.

Ich habe eine ASPX-Datei, mit der ich auf eine Access-Datenbank zugreife und die sieht so aus:

<%@ Page Language="VB" Debug="true" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.OleDb" %>
<script runat="server">

Sub Page_Load (ByVal Sender As Object, ByVal E As EventArgs)

' Verbindungszeichenfolge zusammensetzen
Dim connStr As String
connStr = "Provider=Microsoft.Jet.OLEDB.4.0;"
connStr += "Data Source=E:\kunden\homepages\3\d92260533\test\200505 01-01\Shop.mdb;"

' Verbindung zur Datenbank herstellen
Dim conn As New OleDbConnection(connStr)
conn.Open()

' SQL-Kommando erstellen und ausführen
Dim sql As String
sql = "SELECT * FROM TblArtikel"
Dim cmd As New OleDbCommand(sql, conn)
Dim myDataReader As OleDbDataReader
myDataReader = cmd.ExecuteReader()

' SQL-Resultat an ein Steuerelement binden
myGrid.DataSource = myDataReader
DataBind()
myDataReader.Close()
conn.Close()

End Sub

</script>

Das funktioniert bei mir Lokal auch einwandfrei.
Leider nicht bei meinem Provider Schlund&Partner bzw. 1&1. Hier ruft die Zeile:
conn.Open()
einen Security-Error hervor.

Hat irgendwer eine Idee, woran das liegen könnte und vielleicht eine Idee für die Lösung, MS Access-Datenbank doch noch mit ASP.Net bei diesen Providers zu betreiben. Bis jetzt arbeitete ich mit ASP und da funktioniert das einwandfrei.

Vielen Dank schon mal im Voraus,
lg, webwurm

Jaguar 09.07.2005 09:19

Re: ASP.Net und Datenbankzugriff
 
Zitat:

Original geschrieben von webwurm
....
connStr += "Data Source=E:\kunden\homepages\3\d92260533\test\200505 01-01\Shop.mdb;"
....
Du wirst kaum von einem Webspace auf dein lokales Festplattenlaufwerk E: zugreifen können!
Der Pfad kann nicht passen, daher das Problem mit der Verbindung.

webwurm 09.07.2005 11:50

Das ist der Pfad des Webhosters.
Wie gesagt: Auf allen meinen ASP-Seiten funktioniert's mit diesem Verbindungsstring. Nur mit ASP.Net nicht.
Irgendwer hat mir etwas gesagt, dass Zugriff aus MS Access kein managed Code ist, und daher von großen Providers unterbunden wird?!

Biri 09.07.2005 19:10

hi,

der zugriff auf eine ms-acess datenbank muss über den oledb provieder erfolgen (das machst du in deinem code eh korrekt) - dieser greift auf "darunterleigende" treiber zu (für z.B. dbase, excel, csv dateien, access,...) diese treiber sind natürlich nicht in managed code geschreiben.
im gegensatz wird beim zugriff auf z.B. sql server und seit .net 1.1 auch oracle ein eigener provider von .net bereitgestellt, sodass der zugriff komplett managed erfolgen kann. (es gibt noch mehrere managed treiber, für access ist mir nix bekannt)

zugriff von einer webseite auf das dateisystem ist sicher ein sicherheitsproblem.
versuche mal, eine odbc connection auf die ms-access datenbank einzurichten und dann über diese auf die datenkbank zuzugreifen.

asp.net hat ein komplett neues security konzept - nicht vergleichbar mit asp.
asp.net verwendet die sog. "code access security" - als stichwort, falls du mehr darüber erfahren willst.

fg
-hannnes

webwurm 09.07.2005 23:45

vielen dank, das hat mir schon weitergeholfen.
ich habe jetzt von verschiedenen internetseiten folgenden code zusammengetragen, mit dem ich eine odbc-connection aufbauen kann.
allerdings habe ich jetzt die herausforderung, dass ich kein OleDbDataReader-Objekt habe. Wie binde ich daher meine Daten ein ein zB DataGrid??

Hier mein Code:

'ODBC-Verbindung herstellen
Dim strConn As String
Dim oODBCConnection As OdbcConnection
strConn = "DBQ=E:\kunden\homepages\3\d92260533\test\2005 0501-01\Shop.mdb; Driver={Microsoft Access Driver (*.mdb)};DriverId=25;FIL=MS Access;"
oODBCConnection = New Odbc.OdbcConnection(strConn)
oODBCConnection.Open()


'ODBC-DataAdapter verbinden
Dim strSql As String
Dim objDataAdapter As New OdbcDataAdapter()
strSql = "SELECT * from TblArtikel"
objDataAdapter = New OdbcDataAdapter(strSQL, oODBCConnection)


'DataSet füllen
Dim objDataSet As New DataSet()
objDataAdapter.Fill(objDataSet, "TblArtikel")

'???

'DataGrid füllen
DataGrid.DataSource = '...???
DataGrid.DataBind()


'ODBC-Verbindung schließen
oODBCConnection.Close()

Biri 10.07.2005 11:30

hi,

Daten ans datagrid binden hat nix mit oledbreader zu tun - daten eines Datasets werden an ein Grid gebunden und soeines hast du ja. ;)
(datareader ist die schnellste möglichkeit, daten auszulesen - wenn du aber an controls binden willst, ist es einfacher ein dataset zu verwenden, weil hier das binding "automatisch" geht)

Zusammenhang:
Für verschiedene Datenbank brauchst du unterschiedliche Provider, um diese anzubinden, also z.B. SQLServer Provider, Oracle Provicer, OleDB Provider, ODBC Provider, ...

Um Befehle an die Datenbank zu schicken bzw. generell als Bindeglied zwischen Datenbank und Dataset brauchst du einen Adapter - in deinem fall ist das der OdbcDataAdapter.

ein dataset ist eine "in memory" repräsentation deiner Daten und hat grundsätzlich einmal garnix mit datenbank zu tun - die daten eines datasets können auch aus einer textdatei kommen und das dataset amnuell aufgebaut werden.
natürlich ist ein dataset aber auch dazu gedacht, daten einer DB in memory darzustellen.
(hat den vorteil, dass man z.B. ein dataset nach xml serialisieren kann)
Controls wie z.B. ein datagrid werden an ein Dataset gebunden.

Der Befehl: objDataAdapter.Fill(objDataSet, "TblArtikel")
verwendet den datenbankadapter um eine abfrage durchzuführen und die retour kommenden daten in das "objDataSet" zu füllen.

man könnte da noch viel darüber schreiben...was verwendest du als entwicklungsumgebung?
es gibt z.B. eine visual studio 2005 express edition - die ist gratis zum download.
da macht all diese sachen ein wizzard.
natürlich sollte man als programmierer wissen, was dieser im hintergrund macht.
aber für den anfang sollte das ausreichen.

fg
-hannes


Alle Zeitangaben in WEZ +2. Es ist jetzt 20:35 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag