对象属性在Web表单上返回零而不是null

时间:2017-02-03 17:28:15

标签: c# .net sql-server oop

我有一个名为FlatFileSetting的数据库表,用于存储有关Excel文件的信息,例如工作表名称,列数等。

用户可以使用.NET Web应用程序中的表单编辑此表中的各行数据。通过从FlatFileSetting object获取值来填充表单。

这样工作正常,当有数据时,文本框会按预期填充,但是当数据库包含整数字段的空值时,关联的文本框显示0而不是空。

FlatFileSetting对象

public class FlatFileSetting
{
    public int ColumnCount { get; set; }
    public string SheetName { get; set; }

    public void GetRecord(int FlatFileSettingId)
    {
        string myConnectionString = "Foo";
        var myConnection = new SqlConnection(ConfigurationManager.ConnectionStrings[myConnectionString].ConnectionString);

        SqlCommand myCommand = myConnection.CreateCommand();
        myCommand.CommandType = CommandType.StoredProcedure;
        myCommand.CommandText = "[dbo].[getFlatFileSetting]";

        myCommand.Parameters.AddWithValue("@FlatFileSettingId", FlatFileSettingId);

        using (myConnection)
        using (myCommand)
        {
            if (myReader["ColumnCount"] != DBNull.Value)
            {
                this.ColumnCount = Int32.Parse(myReader["ColumnCount"].ToString());
            }

            if (myReader["SheetName"] != DBNull.Value)
            {
                this.SheetName = myReader["SheetName"].ToString();
            }
        }
    }
}

我知道原因与!= DBNull.Value有关,但如果我不包含它,我会收到Input String Not in the Correct format错误。

我知道我也可以通过将所有对象属性数据类型更改为字符串来解决此问题,但我需要将它们保持为相同的数据类型。

非常感谢任何帮助

3 个答案:

答案 0 :(得分:4)

此值永远不能为null

public int ColumnCount { get; set; }

因为int不可为空。因此,即使您从未将其设置为任何内容,也会默认为default(int) 0

但是,这可以是null

public int? ColumnCount { get; set; }

或者,如果您更喜欢较长的语法:

public Nullable<int> ColumnCount { get; set; }

答案 1 :(得分:0)

我最好的猜测是你将ColumnCount声明为一个整数,所以它默认为0。试着把它变成一个int? (或nullable int)并将其默认为null;

答案 2 :(得分:0)

如果this.ColumnCount被声明为int,默认情况下它将为零 - 并且不允许空分配。 如果你想保留空值,你需要将它定义为可以为空的int(int?)然后你可以这样做:

this.ColumnCount = myReader["ColumnCount"] as int?;

当它不是整数时它将为null(假设您的数据列被定义为整数类型)。