2011-02-15 6 views
0

J'essaie d'utiliser un ODBCdataadapter en C# pour exécuter une requête qui doit sélectionner certaines données dans une table temporaire en tant qu'étape préliminaire. Toutefois, cette instruction select initiale provoque la fin de la requête afin que les données soient placées dans la table temporaire, mais je ne peux pas exécuter la seconde requête pour la supprimer. J'ai déterminé que le problème est la présence de deux instructions select dans une seule requête dataadapter. C'est-à-dire le code suivant ne fonctionne que la première sélectionnez:plusieurs instructions select dans un seul ODBCdataAdapter

select 1 
select whatever from wherever 

Quand je lance ma requête directement via SQL Server Management Studio, il fonctionne très bien. Quelqu'un at-il déjà rencontré ce genre de problème auparavant? J'ai déjà essayé la même requête sur des bases de données similaires en utilisant le même code C# (seule la chaîne de connexion est différente) et je n'ai eu aucun problème. Avant de demander, la table temporaire est utile parce que sinon je serais en train d'exécuter un tas d'instructions select internes qui ralentiraient la base de données.

+1

Essayez ceci comme première déclaration: 'set nocount on' –

Répondre

1

En supposant que vous exécutiez une commande dont le type de commande est CommandText, vous avez besoin d'un ; pour séparer les instructions.

select 1; 

select whatever from wherever; 

Vous pouvez également envisager d'utiliser une procédure stockée si possible. Vous devez également utiliser les objets SQL client au lieu du client ODBC. De cette façon, vous pouvez tirer parti de méthodes supplémentaires qui ne sont pas disponibles autrement. Tu es censé avoir de meilleures performances aussi.

Si vous devez prendre en charge plusieurs bases de données, vous pouvez simplement utiliser la classe DataAdapter et utiliser une fabrique pour créer les types concrets. Cela vous donne les avantages d'utiliser les pilotes natifs sans être lié à un backend spécifique. Les ORMS qui prennent en charge plusieurs back ends le font généralement. Le bloc d'application d'accès aux données de la bibliothèque d'entreprise, même s'il ne s'agit pas d'un ORM, le fait également.

0

Malheureusement, je n'ai pas accès en écriture à la base de données car mon organisation a été contractée uniquement pour extraire des informations dans un entrepôt de données. Le programme est généralisé pour une utilisation sur plusieurs systèmes, c'est pourquoi nous sommes allés avec ODBC. Je suppose que ce ne serait pas terrible de le réécrire en utilisant les objets de gestion SQL.

+0

Cela ferait probablement un meilleur commentaire sur ma réponse ou une modification à votre question plutôt qu'une autre réponse. –

Questions connexes