3

我正在使用 OleDB 在 C# 中执行我的查询,

有什么方法可以在一个命令语句中执行多个查询?

我试图用分号 (;) 将它们分隔,但它给出了错误“在末尾找到字符”

我必须一次执行数百个查询。

编辑:我正在执行插入语句。

4

4 回答 4

2

不可能将查询合并到一个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 提供程序,您可能可以使用它。但请注意,它可能会像一条一条地插入记录一样慢。

于 2010-05-01T16:14:07.440 回答
1

只需使用 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

于 2010-05-01T15:56:21.873 回答
0

使用sp_executesql.

在另一个问题中查看我的答案,sp_executesql其中包含批量发送 SQL 查询的示例用法。

于 2010-05-01T16:14:21.577 回答
0

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

希望它可以帮助某人。

于 2018-04-04T13:02:20.817 回答