2012-02-21 4 views
-1

У меня есть эта хранимая процедура в MS SQL2008 (C#)Обновить поплавок до нуля?

ALTER PROCEDURE UpdateProducts 
@ProductID INT, @Name nvarchar(50), @Length Float 
AS 
UPDATE  Product 
SET   Name = @Name, Length = @Length 
WHERE  (ProductID = @ProductID) 

Длина в некоторых случаях "" (ничего). Но когда «" вставлено, вместо этого вставлено значение 0. Я хочу, чтобы значение было нулевым. Как я могу это сделать? Это не сработало:

if (Length == "") 
{ 
    Length = null;    
} 
+1

размера или длину? – ken2k

+0

Является ли поле нулевым? Кстати, «» не является ничем, если вы не имеете в виду значение VB ничего. –

+0

Вы не указали нам объявление размера в C#, и это имя отличается от параметра Length в хранимой процедуре. Howwver: 'Length = NULLIF (@Length, 0)' – vulkanino

ответ

2

Установка по умолчанию для NULL в прок, и вы не должны пройти NULL в явной форме в прок.

CREATE PROC ..dbo.Proc (@param1 int =NULL, @param2 varchar(40) = NULL ,etc) 

Кроме того, если вы должны отправить NULL из вашего приложения вы будете использовать DBNull.Value

+0

Отличный результат! Благодаря! – user1007103

0

Попробуйте DBNull.Value:

if (Size == "") 
{ 
    Size = DBNull.Value; 
} 

и убедитесь, что столбец базы данных обнуляемым.

+0

Я получаю это тогда: Ошибка Невозможно преобразовать тип System.DBNull в строку – user1007103

+0

@ user1007103, изменить тип 'Size' на' object' или присвоить значение 'SqlParameter' непосредственно' DBNull.Value', если строка пуста. –

0

Использование NULLIF

UPDATE  Product 
SET   Name = @Name, Length = NULLIF(@Length, '') 
WHERE  (ProductID = @ProductID) 
  • Пустая строка неявно приводится в 0 для поплавка и междунар. десятичный дает ошибку
  • Пусто строку и NULL разные

Edit: это имеет дело с нечистым входом, так что вам не придется беспокоиться об этом ...

+0

Я все еще получаю значение 0 в длину – user1007103

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