2015-05-21 3 views
1

Внутри класса, я объявляю свойство, назовем егоЯ не могу получить null для double?

public double? myDouble {get; set;} 

Тогда, в моем коде, я намеренно оставить его Unassigned.

Я пытаюсь сохранить его на SQL Server, где связанный столбец является поплавком (соответствующий double в C#) и имеет значение NULL.

Однако, когда я запрашиваю таблицу, она всегда показывает 0 для myDouble.

Надеюсь, кто-то может мне помочь. Большое спасибо.

+2

Не могли бы вы показать свою логику настойчивости? –

+1

Если вы используете ADO.NET, у него есть специальное значение 'DbNull.Value', которое должно фактически хранить« null »в базе данных. Это сбило меня с толку раньше. Однако вам нужно показать больше логики для тех, кто может помочь, поскольку вы не показываете, как вы выполняете сопоставление с C# на SQL. – Guvante

+0

Таким образом, у вас есть проблема с сохранением ценности для вашей базы данных, но вы не показываете соответствующий код. Это поведение указано между причинами закрытия для вопроса – Steve

ответ

2

Одна из двух вещей, которые, как мне казалось, происходит. Либо a) вы поместили ограничение по умолчанию в это поле в SQL Server (легко проверить SSMS), либо b) вы назначаете 0 этому двойнику где-нибудь в коде (который можно проверить, установив точку останова в Visual Studio непосредственно перед вы обращаетесь к базе данных и возвращаетесь назад).

Не зная, как сконструирован ваш DAL (EF, ADO.NET и т. Д.), Трудно дать более конкретные рекомендации.

+0

Да, в этой колонке действительно есть ограничение, которое я не смог проверить. Спасибо, Гарри .. – Minh

0

Попробуйте использовать float, если тип float. Я не думаю, что это действительно вызывает проблему.

public float myDouble {get; set;} 
+0

float в SQL переводит в double в C#. Я не уверен, почему, но это то, что я узнал. Спасибо за усилия, хотя, Chol .. :) – Minh

0

Попробуйте это в сохранить в Sql код:

myDouble == null ? DBNull.Value : (double)myDouble; 

Вы должны хранить нуль в базе данных как DBNull.Value. Надеюсь, это поможет :)

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