我的C#程序连接到用户请求SQL数据库,获取第一个打开请求,处理它并将请求标记为已关闭。然后我得到下一个打开的请求。
问题是我总是从SQL Query中获得相同的请求,尽管它被标记为“已关闭”。我怀疑我得到了缓存结果而不是更新数据。但我不知道如何清除缓存。
我试图处理SQLDataAdpater并每次都创建一个新的。我还尝试将随机数作为参数添加到SQL Select存储过程中。他们都没有工作。
有人可以帮我解决这个问题吗?感谢。
Sql查询是:
Select Top(1) RequestID, RequestType, RequestXML from Request
where RequestStatus='OP'
SQL Update命令:
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();
}
我检查过数据库,记录被标记为已关闭。
答案 0 :(得分:1)
在再次填写之前尝试拨打dt.Clear()
。
Fill
方法向现有DataTable
答案 1 :(得分:0)
请发布一些代码。您可能实际上没有将您在本地进行的更改持久保存回实际数据库,这就是为什么您不断从查询中获取原始未更改数据的原因。您也可能在事务中进行更改,但之后不提交事务。
答案 2 :(得分:0)
DataAdapter.Fill首先清除DataTable吗?我想知道你是否每次都在DataTable的末尾添加新行?