2010-05-01 19 views
1

J'utilise OleDB pour exécuter mes requêtes en C#,plusieurs requêtes Execute

Est-il possible que je peux exécuter plusieurs requêtes dans une instruction de commande?

J'ai essayé de les séparer par point-virgule (;) mais il donne l'erreur « Caractères trouvés à la fin »

Je dois exécuter quelques centaines de requêtes en même temps.

Éditer: J'exécute des instructions d'insertion.

+1

Question connexe: http://stackoverflow.com/questions/2336362/execute-multiple-sql-commands-in-one-round-trip (qui semble être liée à SQL Server où le point-virgule ne semble pas cause des problèmes.) – stakx

+0

La question connexe est essentiellement pour les procédures stockées. N'a pas aidé. – smartali89

+0

(@ smartali89: Je n'ai pas mentionné l'autre question pour répondre à la vôtre, mais pour aider les personnes ayant un problème similaire, mais légèrement différent.) Les liens croisés entre des questions similaires peuvent être très utiles dans ces situations.) – stakx

Répondre

1

Il n'est pas possible de combiner des requêtes dans un OleDbCommand. Si possible, effectuez une procédure stockée, sinon vous devrez vous contenter de lancer plusieurs OleDbCommands sur le serveur.

Il convient de noter, cependant, que la mise en commun de connexion est activée pour OleDbConnection par défaut:

Lorsque vous utilisez le .NET Framework données fournisseur pour OLE DB, vous n'avez pas pour permettre la mise en commun de connexion, car le fournisseur gère automatiquement cette .

EDIT:

Essayez quelque chose comme ceci:

INSERT INTO myTable (Column1, Column2, Column3) 
SELECT 'Value1', 1, 'Value3' 
UNION 
SELECT 'Value1', 2, 'Value3' 
UNION 
SELECT 'Value1', 3, 'Value3' 
UNION 
SELECT 'Value1', 4, 'Value3' 

Selon le fournisseur OleDb auquel vous vous connectez, vous pourriez être en mesure d'utiliser. Mais attention, il peut être aussi lent que d'insérer des disques un par un de toute façon.

+0

Exemple SQL ne fonctionne pas avec la base de données Access: * "Erreur de syntaxe (opérateur manquant) dans l'expression de requête" * (Provider = Microsoft.Jet.OLEDB.4.0) – JohnB

1

Il suffit de les regrouper à l'aide de GO (groupes par lot) et de deux-points pour séparer les requêtes à l'intérieur d'un lot. Assurez-vous d'entourer votre côlon avec des espaces. Vous devez soumettre ce SQL à sp_executesql.

BEGIN TRANSACTION 
GO 
USE AdventureWorks; 
GO 
CREATE TABLE dbo.mycompanies 
(
id_num int IDENTITY(100, 5), 
company_name nvarchar(100) 
) 
GO 
INSERT mycompanies (company_name) 
    VALUES (N'A Bike Store'); 
INSERT mycompanies (company_name) 
    VALUES (N'Progressive Sports'); 
INSERT mycompanies (company_name) 
    VALUES (N'Modular Cycle Systems'); 
INSERT mycompanies (company_name) 
    VALUES (N'Advanced Bike Components'); 
INSERT mycompanies (company_name) 
    VALUES (N'Metropolitan Sports Supply'); 
INSERT mycompanies (company_name) 
    VALUES (N'Aerobic Exercise Company'); 
INSERT mycompanies (company_name) 
    VALUES (N'Associated Bikes'); 
INSERT mycompanies (company_name) 
    VALUES (N'Exemplary Cycles'); 
GO 

SELECT id_num, company_name 
FROM dbo.mycompanies 
ORDER BY company_name ASC; 
GO 
COMMIT; 
GO 

Exemple tiré de MSDN.

+0

'GO' ne s'applique qu'à Microsoft SQL Server Management Studio. Il est utilisé pour interrompre les instructions, et ne fonctionnera donc pas avec 'OleDbCommand' – Codesleuth

+0

GO peut être utilisé lors de l'exécution de votre instruction via sp_executesql. –