Exécuter plusieurs requêtes
-
02-10-2019 - |
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
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.