RaviP17 Ответов: 2

Как экспортировать данные в csv, а затем загрузить их на FTP?


Привет,
Я использую приведенный ниже код проекта консольного приложения c# для экспорта данных из sql server в csv-файл, который работает нормально, как и ожидалось, но вторая часть кода для загрузки этого CSV на FTP-сервер не работает. Как мне выполнить эти два действия в одном коде? Экспортируйте и загружайте один и тот же CSV-файл на FTP.
Я получаю ниже ошибку в моем файле журнала.
Message :Sequence contains no elements<br/>


Что я уже пробовал:

<pre> static void Main(string[] args)
        {
            string strConn = ConfigurationManager.ConnectionStrings["ExportRedwoodData.Properties.Settings.Setting"].ConnectionString;
            string ErrorLogfilePath = @"C:\Log\Error.txt";
            string ParamFilePath = @"C:\Params\LastSyncDate.xml";

            XmlDocument doc = new XmlDocument();
            doc.Load(ParamFilePath);
            XmlNode node = doc.DocumentElement.SelectSingleNode("/Date");
            string last_sync_date = node.InnerText;
            string sql = @"SQL Query";

            try
            {
                using (SqlConnection conn = new SqlConnection(strConn))
                {
                    SqlCommand comm = new SqlCommand(sql, conn);
                    comm.Parameters.Add(new SqlParameter("@last_sync_time", last_sync_date));
                    SqlDataAdapter da = new SqlDataAdapter(comm);
                    DataSet ds = new DataSet();
                    da.Fill(ds, "QB");
                    DataTable dt = ds.Tables["QB"];

                    StreamWriter sw = new StreamWriter(@"C:\Export\wt_shipments_data_" + DateTime.Now.ToString("MMddyyyyHHmmss") + ".csv", false);
                    int iColCount = dt.Columns.Count;

                    for (int i = 0; i < iColCount; i++)
                    {
                        sw.Write(dt.Columns[i]);
                        if (i < iColCount - 1)
                        {
                            sw.Write(",");
                        }
                    }
                    sw.Write(sw.NewLine);
                    foreach (DataRow dr in dt.Rows)
                    {
                        for (int i = 0; i < iColCount; i++)
                        {
                            if (dr[i].ToString().Contains(","))
                            {
                                sw.Write("\"{0}\",", dr[i].ToString());
                                //sw.Write(",");
                            }
                            else
                            {
                                sw.Write(dr[i].ToString());
                                sw.Write(",");
                            }    
                        }
                        sw.Write(sw.NewLine);
                    }

                    sw.Close();
                    DateTime NowDateTime = DateTime.Now;
                    node.InnerText = NowDateTime.ToString("yyyy-MM-dd HH:mm:ss.fff");
                    doc.Save(ParamFilePath);
                  
                    string filename = @"C:\Export\wt_shipments_data_123.csv";
  
                    FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create("ftp://"+ "ftpServerIPAddress" + "/test" + Path.GetFileName(filename));
                    request.Method = WebRequestMethods.Ftp.UploadFile;
                    request.Credentials = new NetworkCredential("username", "password");
                    request.UsePassive = true;
                    request.UseBinary = true;
                    request.KeepAlive = false;
                    FileStream stream = File.OpenRead(filename);
                    byte[] buffer = new byte[stream.Length];
                    stream.Read(buffer, 0, buffer.Length);
                    stream.Close();
                }
            }
            catch(Exception ex)
            {
                
                using (StreamWriter writer = new StreamWriter(ErrorLogfilePath, true))
                {
                    writer.WriteLine("Message :" + ex.Message + "<br/>" + Environment.NewLine + "StackTrace :" + ex.StackTrace +
                       "" + Environment.NewLine + "Date :" + DateTime.Now.ToString() + Environment.NewLine);
                    writer.WriteLine(Environment.NewLine + "-----------------------------------------------------------------------------" + Environment.NewLine);
                }
            }
            
        }

jimmson

На какой строке вы получаете ошибку? Вам нужно получить больше информации об исключении, это ключ к решению вашей проблемы.

2 Ответов

Рейтинг:
2

Kornfeld Eliyahu Peter

Глядя на ваш код, нет никакой записи на FTP... так что я не очень удивлен, что часть загрузки не работает...
Следуйте этому образцу: Как загрузить файлы с помощью FTP | Microsoft Docs[^]


RaviP17

Привет,
Я изменил свой код и теперь использую его только для загрузки своего файла на FTP.
Ответ FTP гласит:226 передача завершена. Но я не вижу, чтобы этот файл был загружен на FTP.
У меня есть еще один вопрос: что именно мне нужно поместить в запрос Create?

строковое имя файла = @"C:\Export\wt_shipments_data_123.csv";

Запрос FtpWebRequest = (FtpWebRequest)FtpWebRequest.Создать("ftp://ftp_server_IPaddress/test.htm");
запрос.Method = WebRequestMethods.Ftp.UploadFile;
запрос.Учетные данные = новый NetworkCredential("имя пользователя", "пароль");
запрос.UsePassive = true;
запрос.UseBinary = true;
запрос.Сообщения keepalive = ложь;

byte[] fileContents;
using (StreamReader sourceStream = new StreamReader(filename))
{
fileContents = Encoding.UTF8.Метод getbytes(sourceStream.ReadToEnd());

}
запрос.ContentLength = fileContents.Длина;
использование (Stream requestStream = request.GetRequestStream())
{
requestStream.Write(fileContents, 0, fileContents.Длина);

}
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
Ящик для сообщений.Показать(ответ.Описание состояния.Метод toString());

Рейтинг:
1

RaviP17

Добавлен правильный путь к файлу в команде web request create, и это решило мою проблему
Спасибо