Я написал службу Windows для копирования файла CSV из исходного местоположения в новое местоположение.
После этого CSV в новом местоположении был прочитан и записал данные в MySQL.
Вышеуказанные задачи выполнялись как две отдельные службы, поскольку служба перемещения файлов вызывает ошибку:
{"Процесс не может получить доступ к файлу 'C: \ data.csv', поскольку ониспользуется другим процессом. "}
Следовательно, я решил объединить 2 службы в 1, но все же у меня возникла та же проблема.
Мой код выглядит следующим образом.
program.cs
public void Insert()
{
if (this.OpenConnection() == true)
{
using(var reader = new StreamReader(@"C:\data.csv"))
{
List<string> listA = new List<string>();
while (!reader.EndOfStream)
{
var line = reader.ReadLine();
var values = line.Split(',');
string querynew = "INSERT INTO new_jobs"
+ "(job_reference,status)"
+ "VALUES (?jobNo, ?strClientName)";
MySqlCommand cmd = connection.CreateCommand();
cmd.CommandText= querynew;
cmd.Parameters.Add("?jobNo", MySqlDbType.VarChar).Value = (values[0]);
cmd.Parameters.Add("?strClientName", MySqlDbType.VarChar).Value =(values[1]);
cmd.ExecuteNonQuery();
56 filemove(); <-- error trigger line
}
}
this.CloseConnection();
}
// функция перемещения файла
public void filemove()
{
string fileName = "data.csv";
string sourcePath = @"\\Data\Company Files\";
string targetPath = @"C:";
string sourceFile = System.IO.Path.Combine(sourcePath, fileName);
string destFile = System.IO.Path.Combine(targetPath, fileName);
//I won't include the whole code in this method since it's too lengthy.
}
Service.cs
Я не включаю остальную часть кода в методы.
void timer1_Tick(object sender, ElapsedEventArgs e)
{
dbConnect.Truncate();
dbConnect.Insert();
dbConnect.filemove();
}
protected override void OnStart(string[] args)
{
dbConnect.Insert();
dbConnect.filemove();
}
Ошибка запускается в строке 56 внутри метода Insert ().