Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
SqliteException é gerado quando um erro SQLite é encontrado. A mensagem é fornecida pelo SQLite. As propriedades SqliteErrorCode e SqliteExtendedErrorCode contêm o código de resultado do erro do SQLite.
Erros podem ser encontrados sempre que o Microsoft.Data.Sqlite interage com a biblioteca nativa do SQLite. A lista a seguir mostra os cenários comuns em que erros podem ocorrer:
- Abrindo uma conexão.
- Iniciando uma transação.
- Executando um comando.
- Chamando NextResult.
Considere cuidadosamente como seu aplicativo lidará com esses erros.
Bloqueio, repetições e tempos limite
Aviso
Embora o SQLite dê suporte ao acesso simultâneo ao mesmo banco de dados de vários threads, os objetos de APIs do .NET não são thread-safe. Isso significa que SqliteConnection, SqliteCommand e SqliteDataReader não pode ser compartilhado e usado simultaneamente de vários threads.
Ao usar o Microsoft.Data.Sqlite de um aplicativo simultâneo, basta criar e abrir uma nova instância sempre que precisar acessar o banco de SqliteConnection dados (o pool garante que essa seja uma operação rápida).
O SQLite é agressivo quando se trata de bloquear tabelas e arquivos de banco de dados. Se o aplicativo habilitar qualquer acesso simultâneo ao banco de dados, você provavelmente encontrará erros de ocupado e bloqueado. Você pode atenuar muitos erros usando o registro em log antecipado.
Sempre que o Microsoft.Data.Sqlite encontrar um erro ocupado ou bloqueado, ele tentará novamente automaticamente até que seja bem-sucedido ou o tempo limite do comando seja atingido.
Você pode aumentar o tempo limite de um comando definindo CommandTimeout. O tempo limite padrão é 30 segundos. Um valor de 0 significa sem limite de tempo.
// Retry for 60 seconds while locked
command.CommandTimeout = 60;
O Microsoft.Data.Sqlite às vezes precisa criar um objeto de comando implícito. Por exemplo, durante BeginTransaction. Para definir o tempo limite para esses comandos, use DefaultTimeout.
// Set the default timeout of all commands on this connection
connection.DefaultTimeout = 60;