Я пытаюсь изменить дату отправки через C #, чтобы затем перейти к базе данных SQL Server. Когда я пытаюсь изменить дату, у меня возникает проблема параллелизма, когда кто-то другой обращается к той же записи в базе данных. Я использовал инструмент отладки в C # и заметил, что старый ShippedDate
показывает то же самое, что и новая Дата отгрузки, когда он проходит через метод Update Customer. Я пытался пройти через код и не могу найти, что является неправильным. Любая помощь будет принята с благодарностью.
Как указано выше, я довольно широко использовал инструмент отладки и указал, что первоначальная дата изменяется на новую. Это приводит к моему счету = 0, который затем выдает ошибку.
Соединение с базой данных хорошее и показало, что оно успешно.
Вот код вопроса:
public static bool UpdateOrder(Orders oldOrd, Orders newOrd)
{
bool success = false; // did not update
// connection
SqlConnection connection = NORTHWNDDB.GetConnection();
// update command
string updateStatement =
"UPDATE Orders SET " +
"ShippedDate = @NewShippedDate " +
"WHERE OrderID = @OldOrderID " + // identifies order
"AND CustomerID = @OldCustomerID" + // ie. another user changed a value
" AND OrderDate= @OldOrderDate" + // before update completed
" AND RequiredDate= @OldRequiredDate" +
" AND (ShippedDate= @OldShippedDate OR " + // either equal or both are null
" ShippedDate IS NULL AND @OldShippedDate IS NULL)";
SqlCommand cmd = new SqlCommand(updateStatement, connection);
if (newOrd.ShippedDate == null)
cmd.Parameters.AddWithValue("@NewShippedDate", DBNull.Value);
else
cmd.Parameters.AddWithValue("@NewShippedDate", newOrd.ShippedDate);
cmd.Parameters.AddWithValue("@OldOrderID", oldOrd.OrderID);
cmd.Parameters.AddWithValue("@OldCustomerID", oldOrd.CustomerID);
cmd.Parameters.AddWithValue("@OldOrderDate", oldOrd.OrderDate);
cmd.Parameters.AddWithValue("@OldRequiredDate", oldOrd.RequiredDate);
if (oldOrd.ShippedDate == null)
cmd.Parameters.AddWithValue("@OldShippedDate", DBNull.Value);
else
cmd.Parameters.AddWithValue("@OldShippedDate", oldOrd.ShippedDate);
try
{
connection.Open();
int count = cmd.ExecuteNonQuery();
if (count > 0)
{
success = true; // updated
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
connection.Close();
}
return success;
}
}
для обновления даты отгрузки. Я хочу научиться этому хорошо, но пока я борюсь.