Как заставить SQL-запрос возвращать обновленные данные в .NET? - PullRequest
1 голос
/ 18 февраля 2011

Моя C # программа подключается к базе данных SQL запроса пользователя, получает первый открытый запрос, обрабатывает его и помечает запрос как закрытый.Затем я получаю следующий открытый запрос.

Проблема в том, что я всегда получаю один и тот же запрос от SQL-запроса, хотя он помечен как «закрытый».Я подозреваю, что я получаю кэшированный результат вместо обновленных данных.Но я не знаю, как очистить этот кеш.

Я пытался избавиться от SQLDataAdpater и каждый раз создавать новый.Я также попытался добавить случайное число в качестве параметра к хранимой процедуре 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();
 }

Я проверялбаза данных и запись были помечены как закрытые.

Ответы [ 3 ]

1 голос
/ 18 февраля 2011

Попробуйте позвонить dt.Clear() перед повторным заполнением.

Fill метод добавляет строки к существующим DataTable

0 голосов
/ 18 февраля 2011

DataAdapter.Fill сначала очищает DataTable? Интересно, вы каждый раз добавляете новые строки в конец таблицы данных?

0 голосов
/ 18 февраля 2011

Разместите код, пожалуйста.Вполне возможно, что вы фактически не сохраняете изменения, внесенные локально, в вашу реальную базу данных, поэтому вы продолжаете получать исходные неизмененные данные из своего запроса.Также возможно, что вы вносите изменения внутри транзакции, но затем не фиксируете транзакцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...