2017-02-03 56 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?; 

這將是空時,它不是一個整數(假設你的數據列定義爲整數類型)。