Skip to main content
 首页 » 编程设计

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

2024年02月05日31jpfss

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

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

这工作正常,文本框在有数据时按预期填充,但是当数据库包含整数字段的空值时,关联的文本框显示 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错误。

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

非常感谢任何帮助

请您参考如下方法:

此值永远不能为null:

public int ColumnCount { get; set; } 

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

但是,这可以是 null:

public int? ColumnCount { get; set; } 

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

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