我正在使用 OleDB 在 C# 中执行我的查询,
有什么方法可以在一个命令语句中执行多个查询?
我试图用分号 (;) 将它们分隔,但它给出了错误“在末尾找到字符”
我必须一次执行数百个查询。
编辑:我正在执行插入语句。
我正在使用 OleDB 在 C# 中执行我的查询,
有什么方法可以在一个命令语句中执行多个查询?
我试图用分号 (;) 将它们分隔,但它给出了错误“在末尾找到字符”
我必须一次执行数百个查询。
编辑:我正在执行插入语句。
不可能将查询合并到一个OleDbCommand
. 如果可能,请创建一个存储过程,否则您将不得不坚持在服务器上触发许多 OleDbCommand。
值得注意的是,OleDbConnection
默认情况下启用了连接池:
当您为 OLE DB 使用 .NET Framework 数据提供程序时,您不必启用连接池,因为提供程序会自动管理它。
编辑:
尝试这样的事情:
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 提供程序,您可能可以使用它。但请注意,它可能会像一条一条地插入记录一样慢。
只需使用 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。
使用sp_executesql
.
请在另一个问题中查看我的答案,sp_executesql
其中包含批量发送 SQL 查询的示例用法。
我想在OleDB
我正在处理的项目中使用 Access 数据库中执行多个 SQL 语句,但我找不到任何适合我的情况的东西,所以我想出了这个解决方案,它基本上将 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();
}
希望它可以帮助某人。