检查是否在Thread OnStart中插入了记录c#

时间:2012-08-04 01:56:16

标签: c# sql-server

我有一个类库,用于选择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()
  {
  }
}

请有人告诉我该怎么做。

先谢谢。

2 个答案:

答案 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();