public void PrepareInsertVersionCommand(IDbCommand command, DatabaseVersion version, string failedUpgradeFromVersion, string failedUpgradeToVersion, string failedUpgradeError) { command.CommandText = "INSERT INTO \"Version\" (\"Product\", \"Version\", " + "\"FailedUpgradeFromVersion\", \"FailedUpgradeToVersion\", \"FailedUpgradeError\") " + "VALUES (:product, :version, :failedupgradefromversion, " + ":failedupgradetoversion, :failedupgradeerror)"; IDbDataParameter productParameter = command.CreateParameter(); IDbDataParameter versionParameter = command.CreateParameter(); IDbDataParameter failedUpgradeFromVersionParameter = command.CreateParameter(); IDbDataParameter failedUpgradeToVersionParameter = command.CreateParameter(); IDbDataParameter failedUpgradeErrorParameter = command.CreateParameter(); command.Parameters.Add(productParameter); command.Parameters.Add(versionParameter); command.Parameters.Add(failedUpgradeFromVersionParameter); command.Parameters.Add(failedUpgradeToVersionParameter); command.Parameters.Add(failedUpgradeErrorParameter); productParameter.ParameterName = "product"; productParameter.DbType = DbType.String; productParameter.Size = 250; versionParameter.ParameterName = "version"; versionParameter.DbType = DbType.String; versionParameter.Size = 250; failedUpgradeFromVersionParameter.ParameterName = "failedupgradefromversion"; failedUpgradeFromVersionParameter.DbType = DbType.String; failedUpgradeFromVersionParameter.Size = 50; failedUpgradeToVersionParameter.ParameterName = "failedupgradetoversion"; failedUpgradeToVersionParameter.DbType = DbType.String; failedUpgradeToVersionParameter.Size = 50; failedUpgradeErrorParameter.ParameterName = "failedupgradeerror"; failedUpgradeErrorParameter.DbType = DbType.String; failedUpgradeErrorParameter.Size = 4000; productParameter.Value = version.Product; versionParameter.Value = version.Version; if (failedUpgradeFromVersion != null) { failedUpgradeFromVersionParameter.Value = failedUpgradeFromVersion; failedUpgradeToVersionParameter.Value = failedUpgradeToVersion; failedUpgradeErrorParameter.Value = failedUpgradeError; } else { failedUpgradeFromVersionParameter.Value = DBNull.Value; failedUpgradeToVersionParameter.Value = DBNull.Value; failedUpgradeErrorParameter.Value = DBNull.Value; } }
public void PrepareInsertVersionCommand(IDbCommand command, DatabaseVersion version, string failedUpgradeFromVersion, string failedUpgradeToVersion, string failedUpgradeError) { command.CommandText = "INSERT INTO Version (Product, Version, " + "FailedUpgradeFromVersion, FailedUpgradeToVersion, FailedUpgradeError) " + "VALUES (@Product, @Version, @FailedUpgradeFromVersion, " + "@FailedUpgradeToVersion, @FailedUpgradeError)"; IDbDataParameter productParameter = command.CreateParameter(); IDbDataParameter versionParameter = command.CreateParameter(); IDbDataParameter failedUpgradeFromVersionParameter = command.CreateParameter(); IDbDataParameter failedUpgradeToVersionParameter = command.CreateParameter(); IDbDataParameter failedUpgradeErrorParameter = command.CreateParameter(); command.Parameters.Add(productParameter); command.Parameters.Add(versionParameter); command.Parameters.Add(failedUpgradeFromVersionParameter); command.Parameters.Add(failedUpgradeToVersionParameter); command.Parameters.Add(failedUpgradeErrorParameter); productParameter.ParameterName = "@Product"; productParameter.DbType = DbType.String; productParameter.Size = 250; productParameter.ParameterName = "@Version"; versionParameter.DbType = DbType.String; versionParameter.Size = 250; failedUpgradeFromVersionParameter.ParameterName = "@FailedUpgradeFromVersion"; failedUpgradeFromVersionParameter.DbType = DbType.String; failedUpgradeFromVersionParameter.Size = 50; failedUpgradeToVersionParameter.ParameterName = "@FailedUpgradeToVersion"; failedUpgradeToVersionParameter.DbType = DbType.String; failedUpgradeToVersionParameter.Size = 50; failedUpgradeErrorParameter.ParameterName = "@FailedUpgradeError"; failedUpgradeErrorParameter.DbType = DbType.String; failedUpgradeErrorParameter.Size = 4000; productParameter.Value = version.Product; versionParameter.Value = version.Version; if (failedUpgradeFromVersion != null) { failedUpgradeFromVersionParameter.Value = failedUpgradeFromVersion; failedUpgradeToVersionParameter.Value = failedUpgradeToVersion; failedUpgradeErrorParameter.Value = failedUpgradeError; } else { failedUpgradeFromVersionParameter.Value = DBNull.Value; failedUpgradeToVersionParameter.Value = DBNull.Value; failedUpgradeErrorParameter.Value = DBNull.Value; } }
protected void UpdateVersionTable(DatabaseVersion version) { UpdateVersionTable(version, null, null, null); }
protected void UpdateVersionTable(DatabaseVersion version, string failedUpgradeFromVersion, string failedUpgradeToVersion, string failedUpgradeError) { using (IDbTransaction transaction = _connection.BeginTransaction(IsolationLevel.RepeatableRead)) { using (IDbCommand command = _connection.CreateCommand()) { command.Transaction = transaction; _implementation.PrepareDeleteVersionCommand(command); command.ExecuteNonQuery(); } using (IDbCommand command = _connection.CreateCommand()) { command.Transaction = transaction; _implementation.PrepareInsertVersionCommand(command, version, failedUpgradeFromVersion, failedUpgradeToVersion, failedUpgradeError); command.ExecuteNonQuery(); } transaction.Commit(); } }
public DatabaseVersion GetVersion() { if (!VersionTableExists()) { throw new DatabaseVersionTableMissingException("The database does not " + "contain a database version table; it is probably a new database."); } try { using (IDbCommand command = _connection.CreateCommand()) { _implementation.PrepareFetchVersionRowsCommand(command); using (IDataReader reader = command.ExecuteReader(CommandBehavior.SingleResult)) { // Check for a missing row or invalid fields: if (!reader.Read()) { throw new DatabaseVersionTableInvalidException( "The database version table does not contain any valid " + "version data."); } if (reader.FieldCount < 5) { throw new DatabaseVersionTableInvalidException( "The database version table has too few fields to be " + "valid. At least 5 fields are expected."); } if (reader.GetName(0) != "Product" || reader.GetName(1) != "Version" || reader.GetName(2) != "FailedUpgradeFromVersion" || reader.GetName(3) != "FailedUpgradeToVersion" || reader.GetName(4) != "FailedUpgradeError") { throw new DatabaseVersionTableInvalidException( "One of the database version table fields is not the " + "correct field name."); } // Check for an upgrade error: if (!reader.IsDBNull(2)) { if (!reader.IsDBNull(3) && !reader.IsDBNull(4)) { throw new DatabaseUpgradeFailedException( reader.GetString(2), reader.GetString(3), reader.GetString(4)); } else { throw new DatabaseVersionTableInvalidException( "One of the database version upgrade failure warning " + "fields is not set, when one or more of the others is."); } } // Get the version: DatabaseVersion version = new DatabaseVersion(reader.GetString(0), reader.GetString(1)); // Check for multiple rows: if (reader.Read()) { throw new DatabaseVersionTableInvalidException( "The database version table includes more than one version row, " + "and is therefore invalid."); } if (version.Product != _product) { throw new DatabaseVersionTableInvalidException( "The database version is not for this product."); } return version; } } } catch (DbException ex) { throw new DatabaseVersionTableInvalidException("The database version " + "table could not be read due to an unexpected error; check the " + "full error description for details on the specific error.", ex); } }