2012-08-04 49 views
0

我有一个类库,用于选择Access女士的记录,然后将选定的记录插入到SQL Server中。检查是否插入Thread OnStart中的记录c#

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

我想是叫我的线程OnStartSyncDatabase类库,然后检查在OnStart法, 价值,我想插入是否已在SQL Server或尚未备案存在。

这是我的线程:

public partial class Thread : ServiceBase 
{ 
    public Thread() 
    { 
    InitializeComponent(); 
    } 

    protected override void OnStart(string[] args) 
    { 

    } 

    protected override void OnStop() 
    { 
    } 
} 

可以在任何一个可以告诉我该怎么做吧。

谢谢先进。

+0

你好,你为什么不实例化你的库类,并给你打电话start方法GetData方法? – 2012-08-04 02:04:32

+0

是的,当然我会实例化它,现在不知道如何检查这里的现有记录。 – Nothing 2012-08-04 02:06:57

+0

你的服务不是用线程编写的,你的服务类的名称是线程,它会在你的问题中产生混淆,无论你是在讨论线程还是你的服务 – ZafarYousafi 2012-08-04 02:06:59

回答

1

您可以进行检查对象的存在插入 如果它存在返回-1 如果不返回0

你只有从在循环

+0

那么如何在程序中测试我是否从ms中选择的记录。在sql server中插入的访问是否存在。 – Nothing 2012-08-04 03:32:19

+0

嗨,在SQL Server上做一个存储过程,并传递参数,如签入,签出等。在您的存储过程的身体做一个查询来测试(存在或选择计数(*)在哪里......) – 2012-08-06 09:32:49

1

OnStart方法被称为调用它的存储过程当启动命令发送到服务时,它应该足够轻以快速完成。最好在OnStart中启动线程或定时器,并尽快从方法返回。服务中的编码与.net中任何其他类型的应用程序中的编码类似。添加包含SynDataBase类的程序集的引用,然后使用它与您在控制台或win应用程序中使用的相同。您也可以在服务中提供配置文件,并且如果您的代码从配置中获取连接字符串,则可以在服务项目的配置文件中提供该配置元素。只是一个粗略的代码来告诉你如何做到这that.Write代码,您OnStart方法

System.Threading.Thread thread = new System.Threading.Thread(() => 
       { 
        SyncDatabase.GetInstance.DoWhatYouWant(); 

       }); 
thread.Start();