C# 如何在.NET中强制SQL查询返回更新的数据?
我的C程序连接到一个用户请求SQL数据库,获取第一个打开的请求,处理它并将请求标记为关闭。然后我得到下一个开放请求 问题是,我总是从SQL查询返回相同的请求,尽管它被标记为“已关闭”。我怀疑我得到的是缓存的结果,而不是更新的数据。但我不知道如何清除缓存 我试图处理sqldataadpeter并每次创建一个新的。我还尝试向SQL Select存储过程添加一个随机数作为参数。他们都没有工作 谁能在这个问题上帮助我?谢谢 Sql查询是:C# 如何在.NET中强制SQL查询返回更新的数据?,c#,sql,ado.net,C#,Sql,Ado.net,我的C程序连接到一个用户请求SQL数据库,获取第一个打开的请求,处理它并将请求标记为关闭。然后我得到下一个开放请求 问题是,我总是从SQL查询返回相同的请求,尽管它被标记为“已关闭”。我怀疑我得到的是缓存的结果,而不是更新的数据。但我不知道如何清除缓存 我试图处理sqldataadpeter并每次创建一个新的。我还尝试向SQL Select存储过程添加一个随机数作为参数。他们都没有工作 谁能在这个问题上帮助我?谢谢 Sql查询是: Select Top(1) RequestID, Request
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)所说,这可能是一个代码问题,因此发布您的代码将非常有帮助。非常感谢。它解决了这个问题!谢谢。它解决了这个问题!对你们两个都是对的。感谢大家如此快速地回答我的问题并帮助我解决问题!对你们两个都是对的。感谢大家如此快速地回答我的问题并帮助我解决问题!