【问题标题】:Making maskedtextbox to read NULL from SqlDataReader制作 maskedtextbox 从 SqlDataReader 读取 NULL
【发布时间】:2013-07-14 14:02:29
【问题描述】:

我有这个短代码,用于将数据读入 maskedtextbox,然后(不是此代码的一部分)通过 SqlCommand 更新它们

    SqlCommand novyprikaz = new SqlCommand("SELECT * FROM zajezd WHERE akce=" + tentoradek, spojeni);
            spojeni.Open();
            SqlDataReader precti = novyprikaz.ExecuteReader();

            if (precti.Read())
            {maskedTextBox2.Text = precti.GetDateTime(24).ToShortDateString(); // i need to improve this part
}

但是知道maskedTextBox2 的值是否为NULL,它会给我一个错误:

数据为空。不能对 Null 值调用此方法或属性。

我想问你,我应该对这段代码进行什么更改以使其变为 Null? 提前致谢。

这是我以前为INSERT INTO做的代码的sn-p,它被标记为答案。

【问题讨论】:

    标签: c# sql sql-server sqldatareader sqlcommand


    【解决方案1】:

    使用第 24 列上的 IsDBNull method 检查 SqlDataReader 是否包含 DBNull 值,并适当地返回空字符串或非空值

     if (precti.Read())
     {
    
          maskedTextBox2.Text = precti.IsDBNull(24) ? 
                                string.Empty : 
                                precti.GetDateTime(24).ToShortDateString(); 
     }
    

    【讨论】:

    • 非常感谢您的回答,但它给了我这个错误:当没有数据存在时尝试读取无效。
    • 这很奇怪,因为如果 Read 方法返回 true,那么您已经在第一行推进了阅读器,这意味着存在一条记录。然后 IsDBNull 检查该列是否不包含任何值,并且只有当它返回 false 时,代码才会尝试读取第 24 列。在这些行之前是否有其他代码可以改变预期的行为?
    猜你喜欢
    • 1970-01-01
    • 2021-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-27
    • 1970-01-01
    相关资源
    最近更新 更多