Op dit moment ben ik bezig met het aanleggen van een directe verbinding met een DB2 op een AS/400 vanuit SQL server.
Het komt voor dat wij data nodig hebben uit bepaalde tabellen en op dit moment werkt dat via Access "tooltjes".
Deze linked server zou de oplossing moeten bieden tegen talloze tooltjes waarbij het bijhouden waanzin is.
We zijn in het bezit van een Progress DataDirect ODBC driver waarmee de verbinding gelegd wordt.
Ik heb het op 2 manieren geprobeerd, namelijk:
C#
Ik run in C# een query met de volgende code:
Dit duurt ongeveer 30 seconden en dan heb ik het resultaat klaar.
MSSQL
De linked server is aangemaakt en de verbinding is succesvol. Ik run de volgende query:
Sorry, ik kan niet te veel detail geven
Dit duurt ruim 8(!) minuten.Het is een pass-through query dus ik verwacht dat de WHERE al uitgevoerd wordt op de AS400.
Vraag concreet is: hoe kan dit verschil zo enorm groot zijn? Ik zou het liefste de linked server optie hebben, maar 8 is voor onze requirements onacceptabel.
Het komt voor dat wij data nodig hebben uit bepaalde tabellen en op dit moment werkt dat via Access "tooltjes".
Deze linked server zou de oplossing moeten bieden tegen talloze tooltjes waarbij het bijhouden waanzin is.
We zijn in het bezit van een Progress DataDirect ODBC driver waarmee de verbinding gelegd wordt.
Ik heb het op 2 manieren geprobeerd, namelijk:
C#
Ik run in C# een query met de volgende code:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
| static void Main(string[] args) { // Set up connection string string connString = @"dsn=PROGRESS;UID=####;PWD=###"; // Set up query string string sql = @"SELECT * FROM ### WHERE ### < ###"; // Declare connection and data reader variables OdbcConnection conn = null; OdbcDataReader reader = null; try { // Open connection conn = new OdbcConnection(connString); conn.Open(); // Execute the query OdbcDataAdapter cmd = new OdbcDataAdapter(sql, conn); DataSet ds = new DataSet(); cmd.Fill(ds); } catch (Exception e) { Console.WriteLine("Error: " + e); } finally { // Close connection reader.Close(); conn.Close(); } } |
Dit duurt ongeveer 30 seconden en dan heb ik het resultaat klaar.
MSSQL
De linked server is aangemaakt en de verbinding is succesvol. Ik run de volgende query:
SQL:
1
| SELECT * FROM OPENQUERY([AS400E],'SELECT * FROM ### WHERE ## > ##') |
Sorry, ik kan niet te veel detail geven

Dit duurt ruim 8(!) minuten.Het is een pass-through query dus ik verwacht dat de WHERE al uitgevoerd wordt op de AS400.
Vraag concreet is: hoe kan dit verschil zo enorm groot zijn? Ik zou het liefste de linked server optie hebben, maar 8 is voor onze requirements onacceptabel.