0

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

谁能告诉我该怎么做。

提前致谢。

4

2 回答 2

1

您可以创建一个存储过程来检查对象插入是否存在如果不存在则返回 -1 返回 0

你只需要在你的循环中调用它

于 2012-08-04T02:16:09.657 回答
1

OnStart方法在启动命令发送到服务时调用,它应该足够轻以快速完成。最好在 OnStart 中启动线程或计时器并尽快从方法返回。服务中的编码类似于 .net 中任何其他类型的应用程序中的编码。添加包含 SynDataBase 类的程序集的引用,然后像在控制台或 win 应用程序中一样使用它。您还可以在服务中提供配置文件,如果您的代码从配置中获取连接字符串,您可以在服务项目的配置文件中提供该配置元素。只是一个粗略的代码来向您展示如何做到这一点。在您的 OnStart 方法中编写此代码

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

                });
thread.Start();
于 2012-08-04T02:41:43.933 回答