我有一个类库,用于选择Access女士中的记录,然后将所选记录插入SQL Server中。
public class SyncDatabase
{
private static SyncDatabase objs = null;
public static SyncDatabase GetInstance
{
get
{
if (objs == null)
objs = new SyncDatabase();
return objs;
}
}
OleDbConnection con = new OleDbConnection("Provider=Microsoft.jet.oledb.4.0; data source=C:/Users/cheata/Desktop/TimeSheet.mdb");
public void GetData()
{
con.Open();
OleDbCommand cmd = new OleDbCommand("select * from tblEmployee_TimeSheet", con);
DataTable dt = new DataTable();
dt.Load(cmd.ExecuteReader());
var _data = dt.AsEnumerable().Select(row => new tblEmployee_TimeSheet
{
ID = row.Field<int>(0),
EID = row.Field<int>(1),
CheckIn = row.Field<DateTime>(2),
CheckOut = row.Field<DateTime>(3),
DateCheck = row.Field<DateTime>(4)
}).ToList();
con.Close();
var context = TimeSheetDataContext.GetInstance;
foreach (tblEmployee_TimeSheet obj in _data)
{
context.Insert<tblEmployee_TimeSheet>(obj);
}
}
}
我有一个用线程写的窗口服务,当窗口启动时,MyWindowService也会启动。然后它将调用线程OnStart
。
我想要的是在我的线程SyncDatabase
中调用OnStart
类库,然后检查OnStart
方法,是否
我要插入的值已存在于SQL Server的记录中或尚未存在。
这是我的主题:
public partial class Thread : ServiceBase
{
public Thread()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
}
protected override void OnStop()
{
}
}
请有人告诉我该怎么做。
先谢谢。
答案 0 :(得分:1)
您可以创建一个检查对象插入是否存在的存储过程 如果存在则返回-1 如果没有返回0
你只需要在循环中调用它
答案 1 :(得分:1)
OnStart方法,并且它应该足够轻以便快速完成。最好在OnStart中启动一个线程或计时器,并尽快从方法返回。服务中的编码类似于.net中任何其他类型的应用程序中的编码。添加包含SynDataBase类的程序集的引用,然后使用它与在控制台或win app中使用的相同。您还可以在服务中提供配置文件,如果您的代码从config获取连接字符串,您可以在服务项目中的配置文件中提供该配置元素。只是一个粗略的代码,向您展示如何执行此操作。在OnStart方法中编写此代码
System.Threading.Thread thread = new System.Threading.Thread(() =>
{
SyncDatabase.GetInstance.DoWhatYouWant();
});
thread.Start();