2015-08-14 2 views
0

Je peux me connecter avec succès à un serveur distant en utilisant une connexion ODBC en C#.OpenQuery ne fonctionne pas en C#

public void checkGradedSerials() 
     { 
      List<string> gradedHides = new List<string>(); 
      string queryString = "SELECT COUNT(DISTINCT Serial_No) FROM Part_v_Container_Change2 WHERE Change_Date >= '2015-04-01' AND Location = 'H Grading'"; 
      using (OdbcConnection connection = new OdbcConnection("DSN=Pxxxxx32; UID=odbc.xxxx; PWD=xxxxxxx;")) 
      { 
       OdbcCommand command = new OdbcCommand(queryString, connection); 

       command.Connection = connection; 
       connection.Open(); 
       object test = command.ExecuteScalar(); 
       Console.WriteLine(test.ToString()); 

      } 
     } 

Le problème est que cela empêche le dépassement de temps. Je pense que c'est parce que j'envoie des demandes du client au serveur distant (je suis en Nouvelle-Zélande et la base de données est aux USA). La table contient 50 millions d'enregistrements et l'énigme est qu'elle est trop grande pour être utilisée comme une seule table, mais comme j'utilise plus de filtres dans mon 'O WH', les temps morts se produisent pendant le traitement des données.

Dans SQL Management Studio, je peux exécuter la requête avec succès via un OpenQuery qui, je crois, exécute le SQL sur le serveur distant.

Mais si je mets la même requête dans le code ci-dessus comme si:

string queryString = "SELECT * FROM OPENQUERY (PLEXREPORT, 'SELECT COUNT(DISTINCT Serial_No) FROM Part_v_Container_Change2') WHERE Change_Date >= ''2015-04-01'' AND Location = ''H Grading''"; 

Je reçois une erreur:

enter image description here

Est-ce que quelqu'un sait une autre façon d'obtenir le sql pour exécuter sur le serveur, ou ce que je fais mal? Ça me rend fou!

+0

Ne pas partager vos informations d'identification publiquement, utilisez 'xxxx000' place –

+0

Oh wow merci Im habituellement prudent de vérifier cela, mais c'était la dernière heure du dernier jour de la semaine. Je vous remercie! – Danrex

Répondre

0

Votre SQL est erroné

corrigée sql est

SELECT COUNT(Serial_No) FROM Part_v_Container_Change2 WHERE Change_Date >= '2015-04-01' AND Location = 'H Grading' 

remplacer

string queryString = "SELECT COUNT(DISTINCT Serial_No) FROM Part_v_Container_Change2 WHERE Change_Date >= '2015-04-01' AND Location = 'H Grading'"; 

par

string queryString = "SELECT COUNT(Serial_No) FROM Part_v_Container_Change2 WHERE Change_Date >= '2015-04-01' AND Location = 'H Grading'"; 
+0

Non, le code SQL est correct. L'un compte tous les numéros de série, l'autre n'en compte que des uniques. Les deux fonctionnent. – Danrex

+0

puis utilisez SQLConnection au lieu de OdbcConnection –