2015-01-16 10 views
1

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

Моя идея:

if(column table(Quantity) where [email protected] >0) 
    { 
     Do something 
    } 

Я использую ASP.NET, C# и SQL. Вот некоторые из моего кода: // Этот код, когда элемент добавляется в таблицу с текущим идентификатором номер элемента уменьшается на 1.

SqlCommand command = new SqlCommand("UPDATE Items SET Quantity=Quantity-1; 
command.ExecuteNonQuery(); 

В таблице Items у меня есть Количество элемента, так что скажем 5 количество этого конкретного элемента, и каждый раз, когда добавляется в gridview, уменьшается на 1, я не хочу, чтобы оно было ниже 0. (Теперь с этим кодом он опускается ниже 0). У меня есть идея, как я сказал вам выше, но я не знаю, как это сделать.

У кого-нибудь есть идея, как это сделать?

+0

Итак, когда количество достигает 0, что должно произойти - просто прекратите уменьшать значение или? – jarlh

+0

, чтобы дать сообщение об ошибке и больше не уменьшать – user4457996

ответ

0

Просто используйте ИНЕК в вашей команде UPDATE:

SqlCommand command = new SqlCommand(
        "UPDATE Items SET Quantity=Quantity-1 WHERE [email protected] AND Quantity>0"); 
command.Parameters.AddWithValue("@Id", id); 
int numberOfRecords = command.ExecuteNonQuery(); 
if (numberOfRecords==0) 
    throw new Exception("Error setting quantity."); 

Вы можете проверить, является ли количество было установлено путем проверок пострадавших количества записей, должно быть 1, если OK.

+0

Да, но если я хочу сообщить об ошибке, если попытается уменьшить? – user4457996

+0

@ user4457996 См. Http://stackoverflow.com/a/10059585/2224701. Если возвращаемое число равно 0, ничего не обновлялось. –

1

Просто используйте ГДЕ в своем запросе. Дайте мне ваш подробный рассказ END до END. Кроме того, если вы хотите сообщить об ошибке, если что-то случится при выполнении запроса, вы можете сделать, вернув результат ExecuteNonQuery в переменную. Вот для вашей ссылки

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executenonquery%28v=vs.110%29.aspx

Позвольте мне выделить некоторые моменты здесь:

For UPDATE, INSERT, and DELETE statements, the return value is the number of rows affected by the command. 

For all other types of statements, the return value is -1. If a rollback occurs, the return value is also -1. 

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

0

Чтобы получить значение Quantity столбца после его обновления, используйте пункт OUTPUT в вашем SQL заявление, например:

UPDATE <YOUR_TABLE> SET Quantity = Quantity - 1 
OUTPUT INSERTED.Quantity 
WHERE ID = <YOUR_ID> 

После Quantity возвращается как 0, вы можете делать все действия вы требуется в вашем программном обеспечении, например, показать приглашение, если пользователь попытается уменьшить его.

Там больше информации о MSDN здесь: http://msdn.microsoft.com/en-us/library/ms177564.aspx

Если вы не используете SQL Server 2005 или более поздней версии (необходим для OUTPUT), вы могли бы еще написать простую хранимую процедуру, чтобы сделать то же самое, например,

CREATE PROCEDURE DecreaseQuantity 
    @id int 
AS 
BEGIN 

    UPDATE <YOUR_TABLE> 
    SET Quantity = Quantity - 1 
    WHERE ID = @id 

    SELECT Quantity 
    FROM <YOUR_TABLE> 
    WHERE ID = @id 

END 
0

Я бы не рекомендовал делать такую ​​проверку в вашем коде приложения.

Для обеспечения диапазонов значений столбцов в SQL существует конструкция контрольных ограничений. Например, если вы хотите, чтобы вы никогда не иметь отрицательные значения (или ноль) в столбце можно добавить следующее ограничение

ALTER TABLE Items 
ADD CONSTRAINT CK_Items_Quantity_Range CHECK (
    Quantity > 0 
) 

Тогда, если вы делаете вашу UPDATE/INSERT вы получите исключение, которое вам может реагировать на ваш код приложения.

В качестве альтернативы вы также можете использовать триггер, если хотите, чтобы какое-либо действие sql выполнялось, когда столбец достигает определенного значения.

Смежные вопросы