1. ホーム
  2. c#

[解決済み】指定されたキャストが有効でない?

2022-01-17 02:12:06

質問内容

ASP.netで作成したテーブルがあり、ページが読み込まれた後、データベースから情報をテーブルに入力したいのですが、どうすればいいですか?指定されたキャストが有効でないというエラーが発生します。私は何を間違えているのでしょうか? 以下は私のコードです。

public string getData()
{
        string htmlStr = "";

        SqlConnection conn = new SqlConnection(connString);
        SqlCommand command = conn.CreateCommand();
        command.CommandText = "SELECT * from INFO";
        conn.Open();
        SqlDataReader reader = command.ExecuteReader();

        while (reader.Read())
        {
            DateTime Date = reader.GetDateTime(0);
            DateTime Time = reader.GetDateTime(1);
            htmlStr += "<tr><td>" + Date + "</td><td>"  + Time + "</td></tr>";                  
        }

        conn.Close();

        return htmlStr;
}


<table style="width:100%">
                <caption>INFO</caption>
                <tr>
                    <td> Date </td>
                    <td> Time </td>
                </tr>
                    <%=getData()%>
                </table>

これは私のエラーです。

上記のコードのこの行で例外が発生しています。

DateTime Date = reader.GetDateTime(0);

解決方法は?

コメントより

<ブロッククオート

この行 DateTime Date = reader.GetDateTime(0); が例外を投げていました。

最初のカラムは有効な DateTime ではありません。おそらく、テーブル内に複数のカラムがあり、それらを取得しているのでしょう。 すべて このクエリを実行することで

SELECT * from INFO

を取得するクエリに置き換えます。 のみ の2つのカラムに興味があります。

SELECT YOUR_DATE_COLUMN, YOUR_TIME_COLUMN from INFO

そして、もう一度値を読み取ってみてください。

var Date = reader.GetDateTime(0);
var Time = reader.GetTimeSpan(1);  // equivalent to time(7) from your database

または

var Date = Convert.ToDateTime(reader["YOUR_DATE_COLUMN"]);
var Time = (TimeSpan)reader["YOUR_TIME_COLUMN"];