2015-07-04 48 views
-1

我使用的是從列獲取日期時間值:C#中使用SqlDataReader的我想

string date1 = reader. GetDateTime(reader. GetOrdinal("firstMove"). ToString() 

但它拋出一個異常,特別是如果該值爲null ....

+1

的可能重複[SQL數據讀取器 - 處理空列值(http://stackoverflow.com/questions/1772025/sql-data-reader-handling-null-column-values ) – RichardOD

+1

你的代碼不會被編譯。你能否展示簡短但完整的節目演示?你得到了什麼異常? –

回答

0

嘗試以下碼。

string date1=reader["coloumn name"].tostring(); 
+0

謝謝。現在,如果我使用if語句檢查爲空或空,並且如果我可以重複多少次else?基本上我需要檢查約10個字符串爲空響應 –

-2

用法如下,通過使用或函數來檢查是否爲null或不爲null。

if(string1 || string2 ||string3) 
+0

謝謝你的嘗試。這是a)不是答案,b)無效的C#代碼。 –

+0

謝謝專家!!! @ Thorsten Dittmar。!! ans b。只是一個語法不完整的代碼。 – venkatesh

+0

這甚至不是有效的語法,除非'string1','srting2'和'string3'是有效的'bool'值。這個「答案」現在沒有什麼幫助。你可以投入時間來寫你的評論,以改善你的「答案」,而不是...... –

0

,如果你告訴我們,你會得到什麼樣的異常你得到一個異常的事實會更容易解決。可能的錯誤有:

  1. 列未DateTime,從而GetDateTime完全不
  2. firstMove工作是不是一個有效的列名在所有的,所以你不能訪問該列的

假設列確實存在,其類型爲DateTime 的我傾向於使用如下:

DateTime? d = reader["firstMove"] as DateTime?; 

這工作得很好。你要會讀

DateTime? d = reader["firstMove"] as DateTime?; 
string dstring = d.HasValue ? d.Value.ToString() : ""; 

還是什麼:

string date1 = !reader.IsDBNull(reader.GetOrdinal("firstMove")) ? reader.GetDateTime(reader.GetOrdinal("firstMove").ToString() : String.Empty; 
0

這將是對你更好,使用日期時間 - 而不是字符串,處理日期(或爲空的日期時間日期時間?)。

如果你想採用這種做法,您可以使用擴展方法:

public static class IDataReaderExtensions 
{ 
    public static DateTime GetDateTimeOrMinValue(this IDataReader dr, int position) 
    { 
     if (dr.IsDBNull(position)) 
     { 
      return DateTime.MinValue; 
     } 

     return dr.GetDateTime(position); 
    } 

    public static DateTime? GetDateTimeOrNull(this IDataReader dr, int position) 
    { 
     if (dr.IsDBNull(position)) 
     { 
      return null; 
     } 

     return dr.GetDateTime(position); 
    } 
} 

用法:

DateTime dateA = reader.GetDateTimeOrMinValue(reader.GetOrdinal("firstMove")); 

DateTime? dateB = reader.GetDateTimeOrNull(reader.GetOrdinal("firstMove")); 

你甚至可以提高擴展方法,所以它可以接收列名並在內部找到序位。

希望這有助於