2016-08-18 6 views
0

私はこのようなSQL Serverのテーブルを持っている:時間(7)型変数を取得するSqlDataReaderを作成する方法?

userID int 
xCoordinate int 
yCoordinate int 
recordTime time(7) 
itemId int 

私は(今のところ、ユーザー1を言わせて)指定したユーザーのすべての記録時間を取得したいです。 私はこのために次のコードを使用:

public static void something() 
{ 
    string stmt = "select * from GazeTable where id = " + 1 + " ;"; 

    SqlConnection conn = GetConnection(); 
    SqlCommand cmd = new SqlCommand(stmt, conn); 

    conn.Open(); 

    using (var reader = cmd.ExecuteReader()) 
    { 
     while (reader.Read()) 
     { 
      Console.WriteLine(reader.GetDateTime(3)); 
     } 
    } 

    conn.Close(); 
} 

をしかし、それは型 'System.InvalidCastExceptionの' の未処理の例外が

をのSystem.Data.dll

で発生した

エラーをスローしますこの割り当ては有効ではないと言っています。

テーブル内の各recordTimeについて、時間を( "HH:mm:ss.ffff")で印刷するにはどうすればよいですか?

+0

'reader.GetInt(2)'でy座標を取得しようとしていますか? – ntohl

+1

もし私が間違っていないのであれば、SQL型 'Time(7)'はC#の 'DateTime'に変換されず' TimeSpan'に変換されるので、代わりに 'reader.GetTimeSpan(3)'を試してみてください。 –

+0

@ntohl yes do – Danabey

答えて

2

SQLタイプTime(7)datetimeをするSQLタイプがありDateTime値を取得するには、C#型TimeSpanないDateTimeに相当します。

だから代わりのDateTimeのTimeSpanのを読むためにあなたのコードを変更:私の頭の上のうち

public static void something() 
{ 
    string stmt = "select * from GazeTable where id = " + 1 + " ;"; 
    SqlConnection conn = GetConnection(); 
    SqlCommand cmd = new SqlCommand(stmt, conn); 

    conn.Open(); 
    using (var reader = cmd.ExecuteReader()) 
    { 
     while (reader.Read()) 
     { 
     Console.WriteLine(reader.GetTimeSpan(3)); 
     } 
    } 
    conn.Close(); 
} 
0

を、あなたはこのようなものを使用する必要があります(テストしていません):

public static void something() 
    { 
     string stmt = "select * from GazeTable where id = " + 1 + " ;"; 

     SqlConnection conn = GetConnection(); 
     SqlCommand cmd = new SqlCommand(stmt, conn); 

     conn.Open(); 
     using (var reader = cmd.ExecuteReader()) 
     { 
      if (reader.HasRows) 
      { 
       while (reader.Read()) 
       { 
        Console.WriteLine("{0}", ((SqlDataReader)reader).GetTimeSpan(3).ToString(@"dd\.hh\:mm\:ss\:ff")); 
       } 
      } 
      else 
      { 
       Console.WriteLine("No rows found."); 
      } 
     } 
     conn.Close(); 
    } 

time(7)列をtimespanに変換する必要があります。datetimeに直接変換することはできません。

+0

おそらくこれもうまくいくでしょうが、私はコンソールがないことを保証します。 WriteLine( "行が見つかりませんでした。"); '大文字小文字の区別があります。とにかくありがとう – Danabey

関連する問題