private void OnProgressChanged(object sender, ProgressChangedEventArgs e) { FixtureAttachFileProgress prog = e.UserState as FixtureAttachFileProgress; if (prog.Type == FixtureAttachFileProgressType.BeginAttachFile) { currentFileLabel.Text = prog.FileName; } else { progress.PerformStep(); int.TryParse(endFilesCount.Text, out int count); count++; endFilesCount.Text = count.ToString(); bool isSuccess = false; foreach (var obj in prog.Objects) { if (obj.State == FixtureAttachFileState.Success) { isSuccess = true; } ListViewItem item = new ListViewItem(obj.IdDoc.ToString()); item.SubItems.Add(prog.FileName); item.SubItems.Add(obj.Sign); item.SubItems.Add(obj.ObjectType); item.SubItems.Add(obj.ObjectRevision.ToString()); item.SubItems.Add(obj.State.ToString()); logView.Items.Add(item); } if (prog.Objects.Count == 0) { ListViewItem item = new ListViewItem(String.Empty); item.SubItems.Add(prog.FileName); item.SubItems.Add(String.Empty); item.SubItems.Add(String.Empty); item.SubItems.Add(String.Empty); item.SubItems.Add("Error file"); logView.Items.Add(item); } if (isSuccess) { int.TryParse(addFilesCount.Text, out int addCount); addCount++; addFilesCount.Text = addCount.ToString(); } } }
private void OnRun(object sender, DoWorkEventArgs e) { //attachManager.Run(); int counter = 0; DirectoryInfo directory = new DirectoryInfo(directoryBox.TextValue); foreach (var file in directory.GetFiles()) { if (backWorker.CancellationPending) { e.Cancel = true; return; } counter++; List <FixtureAttachFileObject> objects = new List <FixtureAttachFileObject>(); FixtureAttachFileProgress beginProgress = new FixtureAttachFileProgress(); beginProgress.Type = FixtureAttachFileProgressType.BeginAttachFile; beginProgress.FileName = file.Name; backWorker.ReportProgress(counter, beginProgress); if (Regex.IsMatch(file.Name, @"^\d+")) { int idDoc = Convert.ToInt32(Regex.Match(file.Name, @"^\d+").Value); // файл FileStream stream = File.OpenRead(file.FullName); byte[] bytes = new byte[file.Length]; stream.Read(bytes, 0, (int)file.Length); stream.Close(); // контрольная сумма SHA1 s = new SHA1CryptoServiceProvider(); byte[] hash = s.ComputeHash(bytes); string hashStr = (System.BitConverter.ToString(hash)).Replace("-", "").ToLower(); // транзакция OracleConnection connection = obj_lib.Module.OpenSession().Connection as OracleConnection; OracleCommand command = new OracleCommand("pkg_sepo_import_global.attach_fixture_file"); command.Connection = connection; command.CommandType = System.Data.CommandType.StoredProcedure; OracleParameter p_result = new OracleParameter( "p_result", OracleDbType.RefCursor, System.Data.ParameterDirection.Output); OracleParameter p_iddoc = new OracleParameter("p_iddoc", idDoc); OracleParameter p_docname = new OracleParameter("p_docname", file.Name); OracleParameter p_hash = new OracleParameter("p_hash", hashStr); OracleParameter p_data = new OracleParameter("p_data", OracleDbType.Blob); command.Parameters.AddRange(new OracleParameter[] { p_result, p_iddoc, p_docname, p_hash, p_data }); p_data.Value = bytes; command.ExecuteNonQuery(); OracleRefCursor result = (OracleRefCursor)p_result.Value; using (OracleDataReader rd = result.GetDataReader()) { while (rd.Read()) { FixtureAttachFileObject obj = new FixtureAttachFileObject(); obj.IdDoc = rd.GetInt32(1); obj.Sign = rd.GetString(3); obj.ObjectType = rd.GetString(4); obj.ObjectRevision = rd.GetInt32(5); obj.State = (rd.GetInt16(6) == 1) ? FixtureAttachFileState.Success : FixtureAttachFileState.None; objects.Add(obj); } } } FixtureAttachFileProgress endProgress = new FixtureAttachFileProgress(); endProgress.Type = FixtureAttachFileProgressType.EndAttachFile; endProgress.FileName = file.Name; endProgress.Objects = objects; backWorker.ReportProgress(counter, endProgress); } }