2017-02-03 39 views
1

我有一个数据库表名为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错误。

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

任何帮助是极大的赞赏

回答

4

该值永远不能null

public int ColumnCount { get; set; } 

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

然而,这可能是null

public int? ColumnCount { get; set; } 

或者,如果你喜欢长语法:

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

我最好的猜测是,你声明的列数为整数,因此默认为0。尝试使它成为一个整数? (或可为空),并将其默认为空;

0

如果this.ColumnCount被声明为int它将默认为零 - 并且不允许空分配。 如果你愿意,你就需要将它定义为一个可空INT(int?)保护者空,那么你可以这样做:

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

这将是空时,它不是一个整数(假设你的数据列定义为整数类型)。