Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs

Der ODBC .NET Data Provider

Geschrieben von: Christoph Wille
Kategorie: ADO.NET

This printed page brought to you by AlphaSierraPapa

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 Schritte

Der 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 Handling

Wenn 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ßbemerkung

Wer 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.

This printed page brought to you by AlphaSierraPapa

Download des Codes

Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20020206.zip

Verwandte Artikel

Datenaufbereitung in ADO.NET
http:/www.aspheute.com/artikel/20001106.htm
Datenbankzugriff mittels ADO.NET
http:/www.aspheute.com/artikel/20001102.htm
Einführung in ASP.NET Web Forms
http:/www.aspheute.com/artikel/20000808.htm
Eventbehandlung bei ASP.NET WebForms
http:/www.aspheute.com/artikel/20000922.htm
Exception Handling in C#
http:/www.aspheute.com/artikel/20000724.htm
Performancemessungen in .NET
http:/www.aspheute.com/artikel/20011206.htm
Stored Procedures 101 in ADO.NET
http:/www.aspheute.com/artikel/20010626.htm
Web.Config 101
http:/www.aspheute.com/artikel/20010802.htm

Links zu anderen Sites

HOW TO: Use the ODBC .NET Managed Provider in Visual C# .NET and Connection Strings (Q310988)
http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q310988
ODBC .NET Data Provider
http://www.microsoft.com/downloads/release.asp?ReleaseID=35715

 

©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.