Question

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

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 trouvent à la fin »

Je dois exécuter quelques centaines de requêtes à la fois.

Edit:. J'exécute des commandes INSERT

Était-ce utile?

La solution

Il est impossible de combiner des requêtes au sein d'un OleDbCommand . Si possible, une procédure stockée, sinon vous devrez coller à tirer beaucoup OleDbCommands sur le serveur.

Il convient de noter, cependant, que la mise en commun de connexion est activé 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 ce   automatiquement.

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 pourrait être aussi lent que l'insertion d'enregistrements un par un de toute façon.

Autres conseils

Il suffit de les lots à l'aide de GO (un lot de groupes) et des requêtes distinctes à deux points à 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 .

Utilisez sp_executesql.

Vous ne trouvez ma réponse dans une autre question où j'inclure un usage d'échantillon de sp_executesql pour envoyer des requêtes SQL dans un lot.

Je voulais exécuter plusieurs instructions SQL dans une base de données d'accès à l'aide OleDB pour un projet que je travaille, et je ne pouvais pas trouver tout ce qui est assez bon pour ma situation, alors je suis venu avec cette solution qui rompt essentiellement vers le bas la chaîne SQL dans plusieurs instructions SQL et les exécute dans une transaction:

string sql = GetMultiStatementSqlString();
string[] sqlStatements = sql.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
using (OleDbConnection conn = new OleDbConnection(connStr))
{
    conn.Open();
    OleDbTransaction transaction = conn.BeginTransaction();
    foreach (string statement in sqlStatements)
    {
        using (OleDbCommand cmd = new OleDbCommand(statement, conn, transaction))
        {
            cmd.ExecuteNonQuery();
        }
    }
    transaction.Commit();
}

il aide quelqu'un l'espoir.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top