SQL选择数据延迟

时间:2017-05-23 12:24:21

标签: c# sql sql-server

我有两个应用程序(A& B)和一个SQL表(Microsoft SQL Server 2014),其列如下:

|| Guid || Random || WriteTime || Flag || ReadTime ||

应用程序A将使用新的Guid,随机,WriteTime和Flag插入新行。

(代码A)

private void WriteIntoDB(int random)
    {
        SqlCommand cmd = new SqlCommand();
        using (SqlConnection conn = new SqlConnection(connectionString))
        {
            conn.Open();
            using (SqlTransaction trans = conn.BeginTransaction())
            {
                 SqlCommand command = conn.CreateCommand();
                 command.Connection = conn;
                 command.Transaction = trans;

                 command.CommandText = string.Format("INSERT INTO " + "MyTable" + "([Guid],[Random],[WriteTime],[Flag])" + "VALUES(@Guid,@Random,@WriteTime,@Flag)");
                 command.Parameters.AddWithValue("@Guid", Guid.NewGuid());
                 command.Parameters.AddWithValue("@Random", random);
                 command.Parameters.AddWithValue("@WriteTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
                 command.Parameters.AddWithValue("@Flag", 0);

                 command.ExecuteNonQuery();
                 trans.Commit();
             }
    }

此函数将在TimerA_Tick中调用六次(TimerA间隔= 1500毫秒)

应用B还有一个间隔= 1000毫秒的TimerB。在TimerB_Tick中,它将选择Flag = 0的所有行,并将其更改为1,同时填写“ReadTime”列。

(代码B)

private DataSet DS = new DataSet();    
private void ChangeFlag(SqlConnection conn)
   {
         string cmd = "SELECT * FROM MyTable WHERE Flag = 0";
         SqlDataAdapter da = new SqlDataAdapter(cmd, conn);
         DS.Tables["test"].Clear();
         da.Fill(DS.Tables["test"]);
         lock (DS.Tables["test"])
         {
             using (new SqlCommandBuilder(da))
             {
                 DataRow[] rows = DS.Tables["test"].Select("Flag=0 ", "WriteTime ASC");
                 foreach (DataRow row in rows)
                 {
                     if (Convert.ToInt32(row["Random"]) <= 50)
                     {
                         //do something.
                     }
                     row["ReadTime"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
                     row["Flag"] = 1;
                     da.Update(DS.Tables["test"]);
                 }
             }
         }

     }

我希望首先在ApplicationB中首先处理在数据库中写入的'Random'。大部分数据都是,但其中一些不是...... 下面的链接是该SQL表的一部分,以“WriteTime”方兴未知的顺序排列。

enter image description here

之前有一行似乎是先前处理过的数据。但我不知道它为什么会发生(并且不止一次),也不知道如何解决它。

0 个答案:

没有答案