Announcement

Collapse
No announcement yet.

Datenquellen Problem Access und DotNet SQL

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Datenquellen Problem Access und DotNet SQL

    Hey,

    ich muss ein vorhandenes Access Programm in DotNet umschreiben.
    Jetzt hat der Entwickler vor mir, Einfach Tabellen aus verschiedenen Datenbanken verknüpft (was ja in Access gang und gebe ist) und Abfragen untereinander gemacht.

    Ich weiß nicht wie ich das am besten in DotNet realisiere.

    Datenbank 1: MySQL 5.0 auf nem globalen Onlineserver
    Datenbank 2: MS SQL 05 auf nem lokalen Webserver

    Es gibt zig solcher Abfragen die durch die verknüpften Tabellen, die es in DotNet / im SQL Server 05 ja nicht mehr gibt, Probleme macht.

    Z.b.:
    Kunden werden per Abfrage von der Controllabteilung (Datenbank lokal) auf Onlinekonto gesetzt (Datennbank online).

    Abfrage sieht so aus: "Insert Into tbl_online where select tbl_offline...."
    Wie soll ich das am besten realisieren?
    Wenn ich die Daten erst auslese per Select, dann verarbeite und per Insert Into reinschiebe, hab ich aus einer Insert Into ja pro Kunde eine gemacht, oder?

  • #2
    Hallo,

    das Problem lässt sich lösen, indem die .NET-Anwendung auf den MS SQL Server 2005 zugreift und in den dort ausgeführten T-SQL-Anweisungen (JOINs) auf die Daten der externen Datenquellen zugegriffen wird. Der MS SQL Server kann über die OPENROWSET-Funktion beziehungsweise alternativ über einen Linked Server-Eintrag auf alle externen Datenquellen zugreifen, für die es auf diesem Server einen OLE DB-Provider oder ODBC-Treiber gibt.

    Ein Beispiel für den Zugriff auf die Daten einer ACCESS-Datenbank könnte so aussehen:
    [highlight=SQL]
    SELECT
    *
    INTO
    NeueTabelle
    FROM
    OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'C:\Temp\Nordwind.mdb';'admin';'', Kunden) AS k
    WHERE
    k.Firma IS NOT NULL
    [/highlight]

    Die Kombination eines permanenten Linked Server-Eintrags mit einem SYNONYM macht das Ganze auf dem MS SQL Server 2005 selbstverständlich eleganter, wie das nächste Beispiel zeigt:
    [highlight=SQL]
    -- einmalig einrichten
    CREATE SYNONYM DMZTbl FOR LinkedServerDMZ.InternetDatenbank.dbo.WebformTbl;
    GO
    -- später nur noch über den Synonym auf die externen Daten zugreifen
    SELECT * FROM DMZTbl
    [/highlight]
    Zuletzt editiert von Andreas Kosch; 12.02.2008, 07:57.

    Comment


    • #3
      Hey,

      das ist ja schonmal geil das es sowas gibt!
      Allerdings brauch ich ne Verbidnung zu nem SQL Server und nicht zu einem Access DB.
      Wie geht das den?

      Comment


      • #4
        Hallo,

        die OPENROWSET-Funktion wird als T-SQL-Anweisung in der Datenbanksitzung des MS SQL Servers aufgerufen. Mein Beispiel hat gezeigt, wie die Daten aus der externen ACCESS-Datenbank in die MS SQL Server-Datenbank eingefügt werden können.

        Allerdings brauch ich ne Verbidnung zu nem SQL Server ...
        Wenn in der Datenbanksitzung der 1. SQL Server-Instanz ein Zugriff auf eine externe 2. SQL Server-Instanz benötigt wird, muss nur der OLE DB-Provider SQLOLEDB anstelle von Microsoft.Jet.OLEDB.4.0 bemüht werden. Außerdem ist es im Fall des Zugriffs auf einen externen MS SQL Server besser, gleich eine Linked Server-Verbindung einmalig zu deklarieren:
        [highlight=SQL]
        EXEC sp_addlinkedserver
        @server='ZielServerName',
        @srvproduct = '',
        @provider = 'SQLOLEDB',
        @datasrc = 'ZielServerName'
        GO
        EXEC sp_addlinkedsrvlogin
        @rmtsrvname='ZielServerName',
        @useself='false',
        @rmtuser='BenutzerKonto',
        @rmtpassword='BenutzerKontoPasswort'
        GO
        [/highlight]
        Über den Linked Server-Name kann die externe Datenbank dann direkt in den SQL-Anweisungen eingebunden werden:
        [highlight=SQL]
        SELECT * FROM ZielServerName.Datenbankname.dbo.TabellenName
        [/highlight]
        Wird dann noch ein SYNONYM angelegt, ist der Zugriff auf den externen SQL Server nicht auf dem 1. Blick zu erkennen.

        Comment

        Working...
        X