public void UploadOrders() { try { Xceed.Ftp.Licenser.LicenseKey = "FTN42-K40Z3-DXCGS-PYGA"; //Xceed.FileSystem.Licenser.LicenseKey = ""; if (!UploadWork) { try { UploadWork = true; SqlConnection db_connection = new SqlConnection(prop.Connection_string); db_connection.Open(); file.WriteLine(DateTime.Now.ToString("g", ci) + " [+] Выбираем заказы на экспорт"); file.Flush(); SqlCommand db_command = new SqlCommand("SELECT [number], [auto_export], [id_place] FROM [order] WHERE [auto_export] > 0;", db_connection); SqlDataAdapter db_adapter = new SqlDataAdapter(db_command); DataTable tbl = new DataTable(); db_adapter.Fill(tbl); foreach (DataRow rw in tbl.Rows) { try { file.WriteLine(DateTime.Now.ToString("g", ci) + " [+] Подготавливаем к выгрузке заказ " + rw["number"].ToString().Trim()); file.Flush(); PSA.Lib.Util.ExportOrder.autoExport((int)rw["auto_export"], rw["number"].ToString().Trim()); db_command = new SqlCommand("SELECT [server], [path], [username], [password] FROM [place] WHERE [id_place] = " + rw["id_place"], db_connection); db_adapter = new SqlDataAdapter(db_command); DataTable ptbl = new DataTable(); db_adapter.Fill(ptbl); if (ptbl.Rows.Count > 0) { DataRow place = ptbl.Rows[0]; file.WriteLine(DateTime.Now.ToString("g", ci) + " [+] Выгружаем заказ " + rw["number"].ToString().Trim() + " на " + place["server"].ToString().Trim() + " в " + place["path"].ToString().Trim()); file.Flush(); using (FtpConnection connection = new FtpConnection( place["server"].ToString().Trim(), place["username"].ToString().Trim(), place["password"].ToString().Trim())) { connection.Encoding = Encoding.GetEncoding(1251); file.WriteLine("from: " + prop.Dir_export + "\\auto_export\\" + rw["number"].ToString().Trim() + "\\"); file.Flush(); DiskFolder source = new DiskFolder(prop.Dir_export + "\\auto_export\\" + rw["number"].ToString().Trim() + "\\"); string ftp_to = place["path"].ToString().Trim() + rw["number"].ToString().Trim() + "/"; if (ftp_to.Substring(0, 1) == "/") ftp_to = ftp_to.Substring(1); file.WriteLine("to: " + ftp_to); file.Flush(); try { FtpFolder _ftp_to = new FtpFolder(connection, ftp_to); _ftp_to.Delete(); } catch { } FtpFolder destination = new FtpFolder(connection, ftp_to); StreamWriter _tmp = new StreamWriter(prop.Dir_export + "\\auto_export\\" + rw["number"].ToString().Trim() + "\\.lock"); _tmp.Write("\n"); _tmp.Close(); db_command = new SqlCommand("UPDATE [order] SET [status_export] = 'Началась выгрузка', [status_export_date] = getdate() WHERE [number] = '" + rw["number"].ToString().Trim() + "'", db_connection); db_command.ExecuteNonQuery(); source.CopyFilesTo(destination, true, true); FtpFile _lock = new FtpFile(connection, ftp_to + ".lock"); _lock.Delete(); db_command = new SqlCommand("UPDATE [order] SET [auto_export] = -1, [status_export] = 'Отправлен', [status] = '500000', [status_export_date] = getdate() WHERE [number] = '" + rw["number"].ToString().Trim() + "'", db_connection); db_command.ExecuteNonQuery(); file.WriteLine(DateTime.Now.ToString("g", ci) + " [+] Выгружен заказ " + rw["number"].ToString().Trim()); file.Flush(); Directory.Delete(prop.Dir_export + "\\auto_export\\" + rw["number"].ToString().Trim() + "\\", true); } } } catch (Exception ex) { db_command = new SqlCommand("UPDATE [order] SET [status_export] = '" + ex.Message + "', [status_export_date] = getdate() WHERE [number] = '" + rw["number"].ToString().Trim() + "'", db_connection); db_command.ExecuteNonQuery(); file.WriteLine(DateTime.Now.ToString("g", ci) + " [!] Ошибка выгрузки заказа " + ex.Message + "\n" + ex.Source + "\n" + ex.StackTrace); file.Flush(); } } } catch (Exception ex) { file.WriteLine(DateTime.Now.ToString("g", ci) + " [!] Ошибка выгрузки заказов " + ex.Message + "\n" + ex.Source + "\n" + ex.StackTrace); file.Flush(); } finally { UploadWork = false; } } } catch (Exception ex) { file.WriteLine(DateTime.Now.ToString("g", ci) + " [!] Глобальная ошибка по время отправления " + ex.Message); file.Flush(); } }
private void btnStart_Click(object sender, EventArgs e) { btnStart.Enabled = false; try { Xceed.Ftp.Licenser.LicenseKey = "FTN42-K40Z3-DXCGS-PYGA"; data.Columns.Clear(); data.Rows.Clear(); data.Columns.Add("name", "Точка"); data.Columns.Add("rezult", "Результат"); data.Columns[0].Width = 200; data.Columns[1].Width = 350; cn = new SqlConnection(setting.Connection_string); cn.Open(); cmd = new SqlCommand("SELECT * FROM [place];", cn); DataTable tbl = new DataTable(); SqlDataAdapter da = new SqlDataAdapter(cmd); da.Fill(tbl); pb.Minimum = 0; pb.Maximum = tbl.Rows.Count; pb.Value = 0; foreach (DataRow r in tbl.Rows) { try { using (FtpConnection connection = new FtpConnection( r["server"].ToString().Trim(), r["username"].ToString().Trim(), r["password"].ToString().Trim())) { connection.Timeout = 10; string tmp = Guid.NewGuid().ToString(); StreamWriter w = new StreamWriter(System.IO.Path.GetTempPath() + tmp); w.Write(tmp); w.Close(); connection.Encoding = Encoding.GetEncoding(1251); DiskFile source = new DiskFile(System.IO.Path.GetTempPath() + tmp); string ftp_to = r["path"].ToString().Trim(); if (ftp_to.Substring(0, 1) == "/") ftp_to = ftp_to.Substring(1); FtpFolder destination = new FtpFolder(connection, ftp_to); source.CopyTo(destination, true); Thread.Sleep(2000); FtpFile remote = new FtpFile(connection, ftp_to + tmp); remote.Delete(); } data.Rows.Add(new string[] { r["name"].ToString().Trim(), "ok" }); } catch (Exception ex) { data.Rows.Add(new string[] { r["name"].ToString().Trim(), "ошибка: " + ex.Message }); } finally { pb.Value++; Application.DoEvents(); } } } catch { } finally { btnStart.Enabled = true; MessageBox.Show("ok"); } }