我有两个应用程序(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”方兴未知的顺序排列。
之前有一行似乎是先前处理过的数据。但我不知道它为什么会发生(并且不止一次),也不知道如何解决它。