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 = "__.__.____";
    }

} 

但问题是当值为空时,我需要将 maskedTextBox 设为空。我总是遇到这个异常:“无法在 Null 值上调用此方法或属性”

当特定列的值被读取为 NULL 时,如何避免 maskedTextBox 为空?

maskedTextBox 上的掩码是 00/00/0000

非常感谢您回答我的低质量问题。

4

3 回答 3

2

我不确定 precti 是什么,但我认为这应该是 SqlDataReader 对吧?

然而。您的读者有一个方法IsDbNull(INDEX),您可以在其中检查特定列是否为 DbNull。

仅供参考:您不应该像这样构建 SQL 查询:

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 回答
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 回答
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 回答