C# 从数据库读取到占位符文本框不工作Asp.net

C# 从数据库读取到占位符文本框不工作Asp.net,c#,asp.net,C#,Asp.net,我试图将数据库中的值读入占位符文本框,但如果其中一列为null,则会将类型为“System.DBNull”的无法强制转换对象抛出为类型为“System.String”。如果我删除了空的文本框,那么即使数据库中有两个ID号,我也只能看到一个ID SqlDataReader myReader = null; SqlCommand command = new SqlCommand("sp_selectUser", objConnection); command.CommandType

我试图将数据库中的值读入占位符文本框,但如果其中一列为null,则会将类型为“System.DBNull”的无法强制转换对象抛出为类型为“System.String”。如果我删除了空的文本框,那么即使数据库中有两个ID号,我也只能看到一个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);
}

您需要首先检查该值是否为null。设置文本框的文本值时,请尝试以下操作:

txt.Text = myReader["ID1"] == DBNull.Value ? "" : myReader["ID1"].ToString();
这样,如果它为null,它只会用一个空字符串填充它


作为旁注,您正在设置同一文本框的文本值。所以最终的结果总是ID3出现的结果。如果要附加它,请在SQL中使用“+=”而不是“=”

或者对值执行ISNULL检查以将null替换为空,或者在将项目设置到文本框之前将值设置为变量,并对赋值进行空检查是两个选项空问题的一部分代码将文本框的内容替换三次,并将文本框保留为最终值。可能重复@Steve;我应该怎么做才能防止这种情况发生如果你想在同一个文本框中包含三个字段的值,那么你需要写txt.Text+=。。。。对于最后两个字段。我编辑了我的答案,请尝试。语法可能有点不对劲,我是在胡思乱想。最终,您需要先检查空值,然后再执行其他操作。还要确保你为每一个都这样做。