Der ODBC .NET Data Provider
Geschrieben von: Christoph Wille Obwohl es einen speziellen Managed Provider für SQL Server gibt, sowie einen Wrapper für OLE DB Provider, kann es sein, daß man auf seine Datenbank nicht zugreifen kann, weil es für die Datenbank nur einen ODBC Provider gibt. Um auch solche in .NET verwendbar zu machen, stellt Microsoft den ODBC.NET Data Provider als separaten Download zur Verfügung. Der ODBC .NET Data Provider ist als Windows Installer Package mit knapp unter einem Megabyte Download erhältlich. Die Installation geht - so .NET 1.0 und MDAC 2.7 installiert sind, absolut ereignisfrei vonstatten. Wichtig für uns Programmierer ist, daß eine separate Hilfedatei installiert wird (Start Menü, Programs, ODBC .NET Data Provider): Erste SchritteDer ODBC .NET Data Provider ist im Microsoft.Data.Odbc Namespace verpackt, der im GAC (Global Assembly Cache) installiert wurde. Um diesen in ASP.NET verwenden zu können, müssen wir in der web.config eine Assembly-Referenz inkludieren: <configuration> <system.web> <compilation debug="true"> <assemblies> <add assembly="Microsoft.Data.Odbc, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/> </assemblies> </compilation> </system.web> </configuration> Den Zeilenumbruch habe ich nur für das obige Listing eingebaut - in der echten web.config muß der add assembly String auf einer Zeile stehen. Die notwendigen Information erhält man übrigens über den Windows Explorer, wenn man in das WINNT\Assembly Verzeichnis browst: Nach dieser Vorarbeit kann man den ODBC .NET Data Provider nun in jeder ASP.NET Seite verwenden. Die folgende ASP.NET Seite (datareader.aspx) zeigt einen DataReader, wie er auch schon im Artikel Datenaufbereitung in ADO.NET verwendet wurde: <%@ Page Language="C#" Debug="true" %> <%@ Import Namespace="Microsoft.Data.Odbc" %> <script language=C# runat="server"> void Page_Load(Object Src, EventArgs E) { string strConn = "Driver={SQL Server};Server=WEBDEVSRV01;UID=sa;PWD=;Database=Northwind;"; string strSQL ="SELECT Productname, CompanyName, UnitPrice FROM Suppliers INNER JOIN " + "Products ON (Suppliers.SupplierID = Products.SupplierID) WHERE UnitPrice <= $70"; OdbcConnection conn = new OdbcConnection(strConn); OdbcCommand cmd = new OdbcCommand(strSQL, conn); conn.Open(); OdbcDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { txtOutput.Text += dr["Productname"].ToString() + "<br>\r\n"; } dr.Close(); conn.Close(); } </script> <asp:Label ID="txtOutput" Runat="Server" /> Wer den Code vergleicht, wird bemerken, daß eigentlich nur eine Änderung sich durch den Sourcecode zieht - aus dem Prefix Sql wird Odbc. Ein weiterer Beweis ist das nachfolgende Script gridbind.aspx - auch dieses ist im Prinzip unverändert zum SQL Managed Provider Beispiel: <%@ Page Language="C#" Debug="true" %> <%@ Import Namespace="System.Data" %> <%@ Import Namespace="Microsoft.Data.Odbc" %> <script language=C# runat="server"> void Page_Load(Object Src, EventArgs E) { string strConn = "Driver={SQL Server};Server=WEBDEVSRV01;UID=sa;PWD=;Database=Northwind;"; string strSQL ="SELECT Productname, CompanyName, UnitPrice FROM Suppliers INNER JOIN " + "Products ON (Suppliers.SupplierID = Products.SupplierID) WHERE UnitPrice <= $70"; OdbcConnection conn = new OdbcConnection(strConn); DataSet ds = new DataSet(); OdbcDataAdapter cmd = new OdbcDataAdapter(strSQL, conn); cmd.Fill(ds, "Lieferanten"); conn.Close(); MyDG.DataSource = ds.Tables["Lieferanten"].DefaultView; MyDG.DataBind(); } </script> <form runat="server"> <asp:DataGrid id="MyDG" runat="server" Width="700" BorderColor="black" CellPadding="2" CellSpacing="2" HeaderStyle-BackColor="#f8d07a" /> </form> Und mit diesem Code erhält man dann folgende Seite präsentiert: Auch die Verwendung von Stored Procedures läuft analog - aus Sql wird Odbc. Das Wort zum Exception HandlingWenn mit dem ODBC .NET Data Provider etwas schiefgeht, dann läßt er uns das via OdbcException wissen. Prominentes Beispiel: die Connection zum SQL Server kann nicht aufgebaut werden (exceptionhandling.aspx): <%@ Page Language="C#" Debug="true" %> <%@ Import Namespace="Microsoft.Data.Odbc" %> <% string strConn = "Driver={SQL Server};Server=SomeServer;UID=sa;PWD=;Database=Northwind;"; try { OdbcConnection conn = new OdbcConnection(strConn); conn.Open(); } catch (OdbcException e) { // Nur zu Demozwecken - den vollen Fehler gibt man nicht aus! Response.Write("Error: " + e.ToString()); } %> Da der Server SomeServer bei mir im Netzwerk nicht existiert, liefert mir der Aufruf von .Open eine OdbcException. Hier gebe ich die Fehlermeldung direkt an den User aus - aus Sicherheitsgründen sollte man dies nicht machen. Statt dessen den Fehler ins Event Log schreiben, und dem User eine einfache Fehlermeldung präsentieren. SchlußbemerkungWer noch auf Datenbanken zugreifen muß, die nur einen ODBC Treiber zur Verfügung stellen, ist mit dem ODBC .NET Data Provider bestens bedient. Es entsteht kein zusätzlicher Lernaufwand. Download des CodesKlicken Sie hier, um den Download zu starten. Verwandte Artikel
Datenaufbereitung in ADO.NET Links zu anderen Sites
HOW TO: Use the ODBC .NET Managed Provider in Visual C# .NET and Connection Strings (Q310988) Wenn Sie jetzt Fragen haben...Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten. Eine weitere sehr hilfreiche Resource ist das deutsche ASP.NET Wiki, das als zentrale Anlaufstelle für Tips, Tricks, Know How und alles Nützliche was man in seinem Alltag als (ASP).NET-Entwickler so braucht und entdeckt gedacht ist. Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.
Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.
©2000-2006 AspHeute.com |