【问题标题】:How can I include values from text boxes that are not NULL?如何包含非 NULL 文本框中的值?
【发布时间】:2012-01-05 02:18:13
【问题描述】:

我有一个从文本框中获取值并将它们插入数据库的方法。 如何仅从已输入文本的文本框中解析值?

例如,如果文本框 4、5 6 为空,那么我不希望将它们解析为插入方法。

这是我为将一个答案插入数据库而编写的。如何修改它以仅包含那些不为空的文本框?

<div id="answer_wrapper">
                <div class="answer">
                    <h3 class="new">Answer 1</h3>
                    <asp:TextBox ID="AnswerBox1" runat="server" CssClass="form" Width="300px"></asp:TextBox>
                </div> <!-- end answer -->
                <div class="answer">
                    <h3 class="new">Answer 2</h3>
                    <asp:TextBox ID="AnswerBox2" runat="server" CssClass="form" Width="300px"></asp:TextBox>
                </div> <!-- end answer -->
                <div class="answer">
                    <h3 class="new">Answer 3</h3>
                    <asp:TextBox ID="AnswerBox3" runat="server" CssClass="form" Width="300px"></asp:TextBox>
                </div> <!-- end answer -->
                <div class="answer">
                    <h3 class="new">Answer 4</h3>
                    <asp:TextBox ID="AnswerBox4" runat="server" CssClass="form" Width="300px"></asp:TextBox>
                </div> <!-- end answer -->
                <div class="answer">
                    <h3 class="new">Answer 5</h3>
                    <asp:TextBox ID="AnswerBox5" runat="server" CssClass="form" Width="300px"></asp:TextBox>
                </div> <!-- end answer -->
                <div class="answer">
                    <h3 class="new">Answer 6</h3>
                    <asp:TextBox ID="AnswerBox6" runat="server" CssClass="form" Width="300px"></asp:TextBox>
                </div> <!-- end answer -->

protected void FinishQnrButton_Click(object sender, EventArgs e)
        {
            int QuestionnaireId = (int)Session["QuestionnaireID"];  
            SendData = new OsqarSQL();
            int questionId = SendData.InsertQuestions(QuestionName.Text, Int32.Parse(QuestnType.SelectedValue), QuestionnaireId);
            int answerId = SendData.InsertAnswer(AnswerBox1.Text, questionId, QuestionnaireId);
            Response.Redirect("~/buildq/Confirm_Questionnaire.aspx");

        } // End NewQNRButton_Click

        public int InsertAnswer(string AnswerTitle, int QuestionID, int QuestionnaireID)
        {
            int returnValue = 0;
            SqlCommand myCommand = new SqlCommand("NewAnswer", _productConn);
            myCommand.CommandType = CommandType.StoredProcedure;
            myCommand.Parameters.Add(new SqlParameter("@ANSWERTITLE", SqlDbType.NVarChar));
            myCommand.Parameters.Add(new SqlParameter("@QUESTION_ID", SqlDbType.Int));
            myCommand.Parameters.Add(new SqlParameter("@QUEST_ID", SqlDbType.Int));
            myCommand.Parameters.Add("@ANSWER_ID", SqlDbType.Int, 0, "ANSWER_ID");
            myCommand.Parameters["@ANSWER_ID"].Direction = ParameterDirection.Output;
            myCommand.Parameters[0].Value = AnswerTitle;
            myCommand.Parameters[1].Value = QuestionID;
            myCommand.Parameters[2].Value = QuestionnaireID;
            _productConn.Open();
            myCommand.ExecuteNonQuery();
            returnValue = (int)myCommand.Parameters["@ANSWER_ID"].Value;
            _productConn.Close();
            return returnValue;
        }

【问题讨论】:

  • 请注意,textbox.Text 属性值将永远为空。我推测 string.Empty(甚至只是 whitespace)是你真正想要避免的。
  • 如果我正确理解了您的问题,您可以使用 string.IsNullOrEmpty(AnswerBox4.Text) 测试文本框 .Text 值属性并做出决定
  • 您遇到了什么问题或错误..?如果您不检查它们,看起来您还需要将 DBNull 分配作为参数值的一部分。还将 myCommand.Parameters 更改为 myCommand.Parameters.AddWithValue

标签: c# asp.net


【解决方案1】:

从技术上讲,TextBox.Text 属性永远不会是 null。如果表单中没有值,则为string.Empty

你可以用这样的方式测试空字符串:

if (!string.IsNullOrEmpty(AnswerBox1.Text))
    int answerId = SendData.InsertAnswer(AnswerBox1.Text, questionId, QuestionnaireId);

请注意,我不完全确定您的总体目标是什么。也许我错过了一些东西。 听起来就像您在问如何检查每个 TextBox 的空值并在具有非空值的值上执行插入。所以我猜你会多次做与上述类似的事情。还有其他方法可以做到这一点,您可以将其全部包装在辅助方法等中。但通常您只是在测试“根据业务规则不可插入”的值。

【讨论】:

  • 谢谢。我用过它,它现在正在工作。无论如何我可以压缩代码吗?因为它看起来有点臃肿。还是我只是挑剔?
  • @Rupert:很有可能。您可以识别模式并相应地重构。这并不是真正的挑剔,它只是想让你的代码保持干净和富有表现力(这总是一个值得的目标)。在实现功能之前,我会推迟重构,以防万一您需要在此过程中更改其他任何内容。您可以尝试去codereview.stackexchange.com 帮助清理它。 (但请先查看他们的常见问题解答,对于那里的主题,我不是专家。)
猜你喜欢
  • 1970-01-01
  • 2021-12-27
  • 1970-01-01
  • 2015-07-10
  • 2017-09-02
  • 2014-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多