Не очень хорошо знаком с Rundeck, не говоря уже о непосредственном опыте или способности к тестированию, но эти ', выглядят немного странно в:
procArgs: [ansible-playbook, all.yml -l, 10.100.5.103, -vvv, --private-key=/key/location/id_rsa, --user=slave, --become-method=sudo, --tags=libs,master]
--tags=libs,master
быть заключена в кавычки, потому что она содержит буквальную запятую? Если целостность данных в Вашем DB важна, не позволяйте данным быть импортированными, который имеет ошибки или не отвечает требованиям проверки Вашего DB.
Так как это файлы Excel, для пользователя должно быть достаточно легко исправить данные в файле Excel, вместо того, чтобы пытаться использовать другой интерфейс для фиксации данных. Просто удостоверьтесь, что сообщения об ошибках направляют пользователя к тому, какое поле является проблемой, и ясно объясните что не так.
Вы хотите поместить файлы Excel в DB как блоб? или Вы хотите проанализировать файлы и поместить записи в файлы в дб?
Я предполагаю, что это - последний.
Как пользователь я хотел бы иметь опцию знать то, что ошибки так, я могу зафиксировать их и попробовать еще раз. Я думаю, как я попробовал еще раз, зависит от того, сколько данных я загружаю.
Я попытался бы сделать гибридное решение.. если существует только несколько ошибочных шоу экран для исправления тех ошибок, таким образом, пользователь может идти дальше быстро. Если существует тонна ошибок, Вы должны, просто может он и сделать, чтобы пользователь попробовал снова и снова.
До DB. Или имейте отдельную таблицу, в которую входят загрузки, пока они не проверяются и добираются с Вашими "реальными" данными или имеют столбец UploadUniqueId, таким образом, можно откатывать любую загрузку без большого количества суеты.
удалите имя таблицы где UploadUniqueId = 'GUID'
Я попробовал бы следующий подход, который работал хорошо в прошлом.
Необходимо загрузить данные и затем отметить их, если они приводят проверки проверки к сбою. Для того, чтобы на самом деле загрузить данные, у Вас есть несколько опций:
.
public void Load() {
bool OK = File.Exists(_filename);
if (OK) {
string sql = String.Format("Select * from {0}", FileName);
OleDbConnection csv = new OleDbConnection();
OleDbCommand cmd = new OleDbCommand(sql, csv);
OleDbDataReader rs = null;
SqlConnection db = null;
SqlCommand clear = null;
SqlBulkCopy bulk_load = null;
try {
// Note two connections: one from the csv file
// and one to the database;
csv = new OleDbConnection();
csv.ConnectionString = ConnectionString;
csv.Open();
cmd = new OleDbCommand(sql, csv);
rs = cmd.ExecuteReader();
// Dung out the staging table
db = // [Create A DB conneciton Here]
clear = new SqlCommand("Truncate table Staging", db); // Left to the reader
clear.ExecuteNonQuery();
// Import into the staging table
bulk_load = new SqlBulkCopy(db);
bulk_load.DestinationTableName = Destination; // Actually an instance var
bulk_load.WriteToServer(rs);
} catch (Exception ee) {
string summary = ee.Message;
string detail = ee.StackTrace;
//Notify(DisplayType.error, summary, detail);
} finally {
if (rs != null) rs.Close();
if (csv != null) csv.Close();
if (bulk_load != null) bulk_load.Close();
}
}
}