2011-02-18 52 views
1

我的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(); 
} 

我也檢查了數據庫,並標記記錄爲已關閉。

+1

這聽起來像你的代碼有問題。 SqlServer不會緩存結果。嘗試發佈您的代碼。 – 2011-02-18 14:45:55

+0

如何在C#中加載數據?你的SQL查詢是什麼? – Nekresh 2011-02-18 14:46:17

+1

如果您在使用簡單的ADO.net時未明確設置緩存,則不應該有任何緩存。你可以發佈示例SQL來了解如何選擇下一個請求?您是否確認請求正在通過查看數據庫被標記爲已處理? – 2011-02-18 14:46:50

回答

0

請寄一些代碼。您可能實際上沒有將您在本地進行的更改持久保存到實際的數據庫中,這就是爲什麼您始終從查詢中獲取原始未更改的數據的原因。您也可以在事務內進行更改,但不提交事務。

0

DataAdapter.Fill是否首先清除DataTable?我想知道是否每次都將新行添加到DataTable的末尾?

1

嘗試在再次填充之前調用dt.Clear()

Fill方法添加行現有DataTable