C# SQL选择数据延迟
我有两个应用程序(A和B)和一个SQL表(Microsoft SQL Server 2014),列如下:C# SQL选择数据延迟,c#,sql,sql-server,C#,Sql,Sql Server,我有两个应用程序(A和B)和一个SQL表(Microsoft SQL Server 2014),列如下: || Guid || Random || WriteTime || Flag || ReadTime || 应用程序A将插入具有新Guid、random、WriteTime和Flag的新行 (代码A) 此函数将在TimerA_Tick中调用六次(TimerA间隔=1500毫秒) 应用程序B也有一个时间间隔为1000毫秒的TimerB。在TimerB_Tick中,它将选择Flag=0的所有行
|| Guid || Random || WriteTime || Flag || ReadTime ||
应用程序A将插入具有新Guid、random、WriteTime和Flag的新行
(代码A)
此函数将在TimerA_Tick中调用六次(TimerA间隔=1500毫秒)
应用程序B也有一个时间间隔为1000毫秒的TimerB。在TimerB_Tick中,它将选择Flag=0的所有行,并将其更改为1,还将填充“ReadTime”列
(代码B)
私有数据集DS=新数据集();
私有无效更改标志(SqlConnection conn)
{
string cmd=“从MyTable中选择*,其中Flag=0”;
SqlDataAdapter da=新的SqlDataAdapter(cmd,conn);
DS.Tables[“test”].Clear();
da.填充(DS.表格[“测试]);
锁(DS.表[“测试”])
{
使用(新的SqlCommandBuilder(da))
{
DataRow[]rows=DS.Tables[“test”]。选择(“Flag=0”,“WriteTime ASC”);
foreach(数据行中的行)
{
if(将.ToInt32(行[“随机”])这两个进程是否都在同一台机器上运行?这个问题包括.Net中now的准确性。是什么让你认为这组进程是有序的还是无序的?@destination data是的,在同一台机器上,相同的time@scsimon很抱歉,我听不懂您的话…在图片中,表格是用“WriteTime”(ASC)排序的,和“ReadTime”应按ASC的顺序排列,因为“ReadTime”按“WriteTime”的顺序更新。您提到写入计时器每1.5秒运行一次,但WriteTime值相隔不到一秒,您确定计时器按预期运行吗?
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();
}
}
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"]);
}
}
}
}