Я пытаюсь сделать свое приложение, целью которого является сделать резервную копию базы данных на диске, а также отправить ее через ftp или почту. Итак, я сделал исследование и, наконец, написал проект службы Windows и еще один проект на консоли, который создает резервную копию базы данных. Оба работают хорошо, и оба они написаны в той же Visual Studio, но когда я пытаюсь поместить код создания резервных копий в службу Windows, он не работает. Я не понимаю, почему. Я попытался поставить код вместо примера (который создает файл и записывает одну строку там, и эта часть работает хорошо), и я даже попытался сделать другой метод, чтобы сделать это, а затем вызвать этот метод.C#: раздражающая ошибка при создании резервной копии базы данных sql
службаWindows, полностью такой же, как here и в классе SpadesAdminService вместо
System.Diagnostics.EventLog.WriteEntry("SpadesAdminSvc",
ServiceName + "::Execute()");
я сделал этот код (работает хорошо - сделать пустой файл на моем диске каждые 5 секунд, должно быть написано «текст в файл», но файлы появляются):
using (FileStream fs = File.OpenWrite("C:\\place\\" + DateTime.Now.ToString("ddMMyyyy_HHmmss") + ".txt"))
{
Byte[] napis = new UTF8Encoding(true).GetBytes("text to files"));
fs.Write(napis, 0, napis.Length);
}
Мой класс решений резервного копирования (одна также работает хорошо):
namespace makeBackUpConsole
{
class Program
{
static void Main(string[] args)
{
string dbname = "exampleToniDatabase";
SqlConnection sqlcon = new SqlConnection();
SqlCommand sqlcmd = new SqlCommand();
SqlDataAdapter da = new SqlDataAdapter();
DataTable dt = new DataTable();
sqlcon.ConnectionString = @"Server=GRAFIKA-2\SQLEXPRESS;Integrated Security=True;" + "Database=exampleToniDatabase";
string destdir = "C:\\place\\";
if (!System.IO.Directory.Exists(destdir))
{
System.IO.Directory.CreateDirectory("C:\\place\\");
}
try
{
sqlcon.Open();
sqlcmd = new SqlCommand("backup database " + dbname + " to disk='" + destdir + "\\" + DateTime.Now.ToString("ddMMyyyy_HHmmss") + ".Bak'", sqlcon);
sqlcmd.ExecuteNonQuery();
sqlcon.Close();
MessageBox.Show("Backup database successfully");
}
catch (Exception ex)
{
MessageBox.Show("Error During backup database!");
}
}
}
}
Я копирую этот класс вместо моего кода, чтобы файлы txt и служба Windows не работали. Вот код:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.ServiceProcess;
using System.IO;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.Windows.Forms;
namespace toni.exampleService.Services
{
public class exampleAdminService : exampleServiceBase
{
public exampleAdminService()
{
this.ServiceName = "exampleAdminSvc";
}
protected override void OnStart(string[] args)
{
base.OnStart(args);
}
protected override void OnStop()
{
base.OnStop();
}
protected override int Execute()
{
//using (FileStream fs = File.OpenWrite("C:\\development\\toni\\dd\\" + DateTime.Now.ToString("ddMMyyyy_HHmmss") + ".txt"))
//{
// Byte[] napis = new UTF8Encoding(true).GetBytes("Dzień i godzina: " + DateTime.Now.ToString("ddMMyyyy_HHmmss"));
// fs.Write(napis, 0, napis.Length);
//}
string dbname = "exampleToniDatabase";
SqlConnection sqlcon = new SqlConnection();
SqlCommand sqlcmd = new SqlCommand();
SqlDataAdapter da = new SqlDataAdapter();
DataTable dt = new DataTable();
sqlcon.ConnectionString = @"Server=GRAFIKA-2\SQLEXPRESS;Integrated Security=True;" + "Database=exampleToniDatabase";
string destdir = "C:\\place\\";
if (!System.IO.Directory.Exists(destdir))
{
System.IO.Directory.CreateDirectory("C:\\place\\");
}
try
{
sqlcon.Open();
sqlcmd = new SqlCommand("backup database " + dbname + " to disk='" + destdir + "\\" + DateTime.Now.ToString("ddMMyyyy_HHmmss") + ".Bak'", sqlcon);
sqlcmd.ExecuteNonQuery();
sqlcon.Close();
MessageBox.Show("Backup database successfully");
}
catch (Exception ex)
{
MessageBox.Show("Error During backup database!");
}
return 0;
}
}
}
Конечно все библиотеки, а также связаны между собой.
Ищите любые советы, пожалуйста, помогите мне.
Заранее благодарю вас за приятный день.
Редактировать: Эй, проблема решена. Я создал учетную запись базы данных (не учетную запись Windows) в студии управления sql, и я поместил эту учетную запись User Id и Password непосредственно в свой код на C# в службе Windows. В любом случае, возможно, кто-то будет использовать мой код :) Спасибо за ответ.
«не работает» - как именно он не работает? Ошибка компилятора? Исключение брошено? Компьютерное плавление? – Corak
какой пользователь выполняет службу Windows? Кажется, что это проблема управления правами ... – chris6523
@Corak Извините, что не описал это, «не работает» означает, что это компиляция, затем я устанавливаю службу, и когда я включаю эту службу, работает некоторое время (~ 5 секунд) и всегда останавливается, файл не появляется. Без исключений. Просто обслуживание отключается собой через несколько секунд, забывая о моем файле. – user2399117