我的C#程序連接到用戶請求SQL數據庫,獲取第一個打開的請求,處理它並將請求標記爲關閉。然後我得到下一個打開的請求。如何強制SQL查詢返回.NET中的更新數據?
問題是我總是從SQL查詢中返回相同的請求,雖然它被標記爲'關閉'。我懷疑我得到一個緩存的結果,而不是更新的數據。但我不知道如何清除緩存。
我試圖處置SQLDataAdpater並每次創建一個新的。我還嘗試將一個隨機數作爲參數添加到SQL Select存儲過程中。他們都沒有工作。
任何人都可以請幫我解決這個問題嗎?謝謝。
SQL查詢是:
Select Top(1) RequestID, RequestType, RequestXML from Request
where RequestStatus='OP'
SQL更新命令:
begin tran
Update Request Set [email protected] where [email protected];
if (@RequestXML is not null)
Update Request Set [email protected] where [email protected];
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();
}
我也檢查了數據庫,並標記記錄爲已關閉。
這聽起來像你的代碼有問題。 SqlServer不會緩存結果。嘗試發佈您的代碼。 – 2011-02-18 14:45:55
如何在C#中加載數據?你的SQL查詢是什麼? – Nekresh 2011-02-18 14:46:17
如果您在使用簡單的ADO.net時未明確設置緩存,則不應該有任何緩存。你可以發佈示例SQL來了解如何選擇下一個請求?您是否確認請求正在通過查看數據庫被標記爲已處理? – 2011-02-18 14:46:50