Выполнить несколько запросов - PullRequest
2 голосов
/ 01 мая 2010

Я использую OleDB для выполнения моих запросов в C #,

Есть ли способ выполнить несколько запросов в одном операторе команды?

Я пытался разделить их точкой с запятой (;), но выдает ошибку «Найдены символы в конце»

Мне нужно выполнить несколько сотен запросов одновременно.

Редактировать: я выполняю операторы вставки.

Ответы [ 4 ]

1 голос
/ 01 мая 2010

Невозможно объединить запросы в один OleDbCommand. Если возможно, создайте хранимую процедуру, в противном случае вам придется придерживаться многих команд OleDbCommands на сервере.

Однако стоит отметить, что пул соединений включен для OleDbConnection по умолчанию:

Когда вы используете .NET Framework Data Провайдера для OLE DB у вас нет включить пул соединений, потому что провайдер управляет этим автоматически.

EDIT:

Попробуйте что-то вроде этого:

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'

В зависимости от того, к какому провайдеру OleDb вы подключаетесь, вы можете использовать это. Но будьте осторожны, это может быть так же медленно, как вставка записей одна за другой.

1 голос
/ 01 мая 2010

Просто сгруппируйте их, используя GO (группирует пакет) и двоеточия, чтобы разделить запросы внутри пакета. Убедитесь, что окружили толстую кишку пробелами. Вам нужно отправить этот 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

Пример взят из MSDN .

0 голосов
/ 04 апреля 2018

Я хотел выполнить несколько операторов SQL в базе данных Access, используя OleDB для проекта, над которым я работаю, и я не смог найти ничего достаточно подходящего для моей ситуации, поэтому я нашел это решение, которое в основном разбивает строку SQL на несколько операторов SQL и выполняет их за одну транзакцию:

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();
}

Надеюсь, это кому-нибудь поможет.

0 голосов
/ 01 мая 2010

Используйте sp_executesql.

См. мой ответ в другом вопросе , где я включаю пример использования sp_executesql для отправки запросов SQL в пакете.

...