Оператор обновления SQL, показывающий OldShippedDate == NewShippedDate (когда я изменяю новую дату отправки), чтобы попробовать обновление. выдает ошибку параллелизма sql - PullRequest
0 голосов
/ 26 апреля 2019

Я пытаюсь изменить дату отправки через 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;
    }
}

для обновления даты отгрузки. Я хочу научиться этому хорошо, но пока я борюсь.

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