我想讓我的應用程序的目標是在磁盤上備份數據庫,並通過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;
}
}
}
當然所有的庫以及鏈接。
尋找任何建議,請幫助我。
預先感謝您,祝您有美好的一天。
編輯: 嘿,問題解決了。 我在sql管理工作室創建了一個數據庫帳戶(不是Windows帳戶),並且將這個帳戶的用戶ID和密碼直接放到了我的C#代碼中。 無論如何,也許有人會使用我的代碼:) 感謝您的答覆。
「不起作用」 - 它究竟如何不起作用?編譯器錯誤?異常拋出?電腦融化? – Corak
哪位用戶正在運行windows服務?好像是一個權限管理問題... – chris6523
@Corak 抱歉沒有描述這個,「不工作」表示正在編譯,那麼我正在安裝服務,當我打開這個服務正在工作一段時間(〜5秒)並且總是停止,文件沒有出現。沒有例外。幾秒鐘後,只有服務人員自己關閉,忘記給我的文件。 – user2399117