Acessar limite de inserção de transação de banco de dados
Existe um limite para a quantidade de inserções que você pode fazer em uma transação do Access antes de confirmar ou antes que o Access / Jet exiba um erro?
Atualmente estou executando o código a seguir na esperança de determinar o que é este máximo.
OleDbConnection cn =
new OleDbConnection(
@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\temp\myAccessFile.accdb;Persist Security Info=False;");
try
{
cn.Open();
oleCommand = new OleDbCommand("BEGIN TRANSACTION", cn);
oleCommand.ExecuteNonQuery();
oleCommand.CommandText =
"insert into [table1] (name) values ('1000000000001000000000000010000000000000')";
for (i = 0; i < 25000000; i++)
{
oleCommand.ExecuteNonQuery();
}
oleCommand.CommandText = "COMMIT";
oleCommand.ExecuteNonQuery();
}
catch (Exception ex)
{
}
finally
{
try
{
oleCommand.CommandText = "COMMIT";
oleCommand.ExecuteNonQuery();
}
catch{}
if (cn.State != ConnectionState.Closed)
{
cn.Close();
}
}
O erro que recebi em um aplicativo de produção quando alcancei 2.333.920 inserções em uma única transação não confirmada foi: "A contagem de bloqueios de compartilhamento de arquivos foi excedida. Aumente a entrada de registro MaxLocksPerFile". Desativar transações corrigiu esse problema.