C# 如何在.NET中强制SQL查询返回更新的数据?

C# 如何在.NET中强制SQL查询返回更新的数据?,c#,sql,ado.net,C#,Sql,Ado.net,我的C程序连接到一个用户请求SQL数据库,获取第一个打开的请求,处理它并将请求标记为关闭。然后我得到下一个开放请求 问题是,我总是从SQL查询返回相同的请求,尽管它被标记为“已关闭”。我怀疑我得到的是缓存的结果,而不是更新的数据。但我不知道如何清除缓存 我试图处理sqldataadpeter并每次创建一个新的。我还尝试向SQL Select存储过程添加一个随机数作为参数。他们都没有工作 谁能在这个问题上帮助我?谢谢 Sql查询是: Select Top(1) RequestID, Request

我的C程序连接到一个用户请求SQL数据库,获取第一个打开的请求,处理它并将请求标记为关闭。然后我得到下一个开放请求

问题是,我总是从SQL查询返回相同的请求,尽管它被标记为“已关闭”。我怀疑我得到的是缓存的结果,而不是更新的数据。但我不知道如何清除缓存

我试图处理sqldataadpeter并每次创建一个新的。我还尝试向SQL Select存储过程添加一个随机数作为参数。他们都没有工作

谁能在这个问题上帮助我?谢谢

Sql查询是:

Select Top(1) RequestID, RequestType, RequestXML from Request 
where RequestStatus='OP' 
SQL更新命令:

begin tran  
Update Request Set RequestStatus=@RequestStatus where RequestID=@RequestID;  
if (@RequestXML is not null)   
    Update Request Set RequestXML=@RequestXML where RequestID=@RequestID;  
commit tran  
C代码:

SqlDataAdapter da = new SqlDataAdapter("SrvGetOpenRequest", cn);
da.SelectCommand.CommandType = CommandType.StoredProcedure;
SqlCommand cmd = new SqlCommand("SrvUpdateRequest", cn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("RequestID", SqlDbType.Int);
cmd.Parameters.Add("RequestStatus", SqlDbType.Char);
cmd.Parameters.Add("RequestXML", SqlDbType.Xml);
DataTable dt = new DataTable();
cn.Open();
da.Fill(dt);
cn.Close();
while (dt.Rows.Count > 0)
{
 // Process returned datatable here.
   ..............

    cmd.Parameters["RequestStatus"].Value = "CL";
    cn.Open();
    cmd.ExecuteNonQuery();
    // fetch the next request to process
    da.Fill(dt);
    cn.Close();
 }

我检查了数据库,记录被标记为关闭。

请发布一些代码。您可能没有将本地所做的更改实际持久化回实际的数据库,这就是为什么您一直从查询中获取原始的未更改数据的原因。也可能是您正在事务中进行更改,但没有提交事务。

请发布一些代码。您可能没有将本地所做的更改实际持久化回实际的数据库,这就是为什么您一直从查询中获取原始的未更改数据的原因。也可能是您正在事务中进行更改,但没有提交事务。

DataAdapter.Fill是否先清除DataTable?我想知道您是否每次都在数据表末尾追加新行?

DataAdapter.Fill是否先清除数据表?我想知道您是否每次都在数据表的末尾追加新行?

在再次填充之前,请尝试调用dt.Clear

Fill方法将行添加到现有数据表中

再次填充之前,请尝试调用dt.Clear


Fill方法将行添加到现有的DataTable中

听起来代码有问题。SqlServer不缓存结果。试着发布你的代码。你如何在C中加载数据?您的SQL查询是什么?如果您使用的是简单的ADO.net,而没有在任何地方显式设置缓存,那么就不应该有任何缓存。您可以发布如何选择下一个请求的示例SQL吗?您是否通过查看数据库确认请求被标记为已处理?是否使用事务更新请求?您是直接使用SQL更新它们,还是使用例如数据集/数据表?请求是指记录?就像是,你又找回了同样的唱片?正如克劳斯·比斯科夫·霍夫曼(Klaus Byskov Hoffmann)所说,这可能是一个代码问题,因此发布代码会有很大帮助。这听起来像是代码有问题。SqlServer不缓存结果。试着发布你的代码。你如何在C中加载数据?您的SQL查询是什么?如果您使用的是简单的ADO.net,而没有在任何地方显式设置缓存,那么就不应该有任何缓存。您可以发布如何选择下一个请求的示例SQL吗?您是否通过查看数据库确认请求被标记为已处理?是否使用事务更新请求?您是直接使用SQL更新它们,还是使用例如数据集/数据表?请求是指记录?就像是,你又找回了同样的唱片?正如克劳斯·比斯科夫·霍夫曼(Klaus Byskov Hoffmann)所说,这可能是一个代码问题,因此发布您的代码将非常有帮助。非常感谢。它解决了这个问题!谢谢。它解决了这个问题!对你们两个都是对的。感谢大家如此快速地回答我的问题并帮助我解决问题!对你们两个都是对的。感谢大家如此快速地回答我的问题并帮助我解决问题!