0

こんにちは、次のようにSql DBから日付を読み取ろうとします:

SqlCommand comm= new SqlCommand("SELECT * FROM zajezd WHERE akce='" + tentoradek + "' AND rocnik='" + rocnik + "'", spojeni);
spojeni.Open();
SqlDataReader read= comm.ExecuteReader();

if (read.Read())
{
    object nulldate = (maskedTextBox2.Text = read.GetDateTime(24).ToShortDateString());
    if (nulldate == null)
    {
        maskedTextBox2.Text = "__.__.____";
    }

} 

しかし問題は、値が null の場合、maskedTextBox を空にする必要があることです。「このメソッドまたはプロパティは Null 値で呼び出すことはできません」という例外が常に発生します。

特定の列の値が NULL として読み取られたときに maskedTextBox を空にすることでそれを回避するにはどうすればよいですか?

maskedTextBox のマスクは 00/00/0000 です

拙い質問にお答えいただき、誠にありがとうございました。

4

3 に答える 3

2

このような何かがうまくいくはずです

maskedTextBox2.Text = read.GetDateTime(24) != null 
    ? precti.GetDateTime(24).ToShortDateString()
    : "__.__.____";

編集

GetDateTimeデータが の場合は機能しないため、上記のコードは正しくありませんDbNull。2 つのオプションがあります

1) 位置の代わりにフィールド名を使用する

maskedTextBox2.Text = read["FieldName"] != null 
    ? ((DateTime)read.GetDateTime(24)).ToShortDateString()
    : "__.__.____";

2) 割り当てる前に DBNull を要求する

maskedTextBox2.Text = !reader.IsDBNull(24)
    ? reader.GetDateTime(24).ToShortDateString()
    : "__.__.____";
于 2013-08-21T12:56:00.363 に答える
2

precti が何であるかはわかりませんが、これは SqlDataReader である必要があると思います。

でも。IsDbNull(INDEX)リーダーには、特定の列が DbNull かどうかを確認できるメソッドが呼び出されます。

参考までに: SQL-Query を次のように作成しないでください。

SqlCommand comm= new SqlCommand("SELECT * FROM zajezd WHERE akce='" + tentoradek + "' AND rocnik='" + rocnik + "'", spojeni);

代わりに、次のコードを試してください。

SqlCommand command = new SqlCommand("SELECT * FROM zajezd WHERE akce=@akce and rocnik=@rocnik", spojeni);
command.Parameters.AddWithValue("@akce", tentoradek);
command.Parameters.AddWithValue("@rocnik", rocnik);
于 2013-08-21T13:00:08.000 に答える
1

交換

 object nulldate = (maskedTextBox2.Text = read.GetDateTime(24).ToShortDateString());

 object nulldate = (maskedTextBox2.Text = read.IsDBNull(24) ? string.Empty : read.GetDateTime(24).ToShortDateString()); 
于 2013-08-21T13:11:07.380 に答える