【问题标题】:Reading from Database to placeholder textboxes not working Asp.net从数据库读取占位符文本框不起作用 Asp.net
【发布时间】:2018-06-14 07:24:18
【问题描述】:

我正在尝试将数据库中的值读取到占位符文本框中,但如果其中一列为空,则将无法将“System.DBNull”类型的对象转换为“System.String”类型。如果我删除具有 null 的文本框,那么即使它是数据库中的两个 ID 号,我也只会看到 1 个 ID

SqlDataReader myReader = null;

    SqlCommand command = new SqlCommand("sp_selectUser", objConnection);
    command.CommandType = CommandType.StoredProcedure;
    command.Parameters.AddWithValue("@userNum", txtuserNum.Text);


    myReader = command.ExecuteReader();
    int i = 0;
    while (myReader.Read())
    {


        TextBox txt = new TextBox();

        txt.Text = (string)myReader["ID1"];
        txt.Text = (string)myReader["ID2"];
        txt.Text = (string)myReader["ID3"];

        ContentPlaceHolder1.Controls.Add(txt);
        ContentPlaceHolder1.Controls.Add(new 

LiteralControl("     "));
            ControlCache.Add(txt);
}

【问题讨论】:

  • 要么在您的 SQL 中对值进行 ISNULL 检查以将 null 替换为空白,或者在将项目设置为 .Text 框之前将值设置为变量并对分配进行空检查有两个选择
  • null 问题的一部分,您的代码将 TextBox 的内容替换了 3 次,并将文本框保留为最终值。
  • @Steve;我应该怎么做才能防止这种情况发生
  • 如果您想在同一个文本框中包含三个字段的值,那么您需要为最后两个字段编写 txt.Text += ....

标签: c# asp.net


【解决方案1】:

您需要先检查该值是否为空。在设置文本框的文本值时试试这个:

txt.Text = myReader["ID1"] == DBNull.Value ? "" : myReader["ID1"].ToString();

这样,如果它为空,它只会用一个空字符串填充它。

附带说明,您正在设置相同文本框的文本值。因此,最终结果将始终是 ID3 出现的任何结果。如果要附加它,请使用“+=”而不是“=”。

【讨论】:

  • 我编辑了我的答案,试试吧。语法可能有点偏离,我正在做这件事。最终,您需要先检查空值,然后再执行其他任何操作。还要确保为每个人都这样做。
猜你喜欢
  • 2018-11-24
  • 2023-03-20
  • 2015-10-25
  • 1970-01-01
  • 2013-09-15
  • 2015-10-08
  • 1970-01-01
  • 1970-01-01
  • 2020-06-13
相关资源
最近更新 更多