2012-01-04 19 views
0

我有一個方法,從文本框中獲取值並將它們插入到數據庫中。 如何從只有文本輸入的文本框中解析值?如何包含不是NULL的文本框中的值?

例如,如果文本框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; 
     } 
+2

請注意,「textbox.Text'屬性值將永遠不會爲空。我推測這個string.Empty(甚至只是* whitespace *)就是你真正想要避免的。 – 2012-01-04 18:15:22

+0

如果我正確理解你的問題你可以用string.IsNullOrEmpty(AnswerBox4.Text)測試一個文本框.Text value屬性並決定 – TheBoyan 2012-01-04 18:15:27

+0

你有什麼問題或錯誤..?看起來像你還需要有一個DBNull分配作爲參數值的一部分,如果你沒有檢查他們..也改變myCommand.Parameters myCommand.Parameters.AddWithValue – MethodMan 2012-01-04 18:16:12

回答

3

技術上,TextBox.Text屬性永遠不會null。如果表單中沒有值,則將爲string.Empty

可以測試的東西空字符串是這樣的:

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

請注意,我不完全確保您在這裏的總體目標是什麼。也許我錯過了一些東西。它聽起來像像你問如何檢查每個TextBox爲空值,並執行插入非空值的插入。所以我想你會做幾次與上面類似的事情。還有其他方法可以做到這一點,你可以將它們全部包裝在輔助方法等中。但是一般來說,你只是測試一個「根據業務規則不可插入」的值。

+0

謝謝。我用這個,現在正在工作。 無論如何我可以壓縮代碼嗎?因爲它似乎有點臃腫。還是我只是很挑剔? – HGomez90 2012-01-04 18:29:27

+2

@Rupert:更可能。您可以相應地識別模式並重新考慮因素。它並不是真的很挑剔,它只是想讓你的代碼保持清潔和表現力(這總是一個有價值的目標)。我會阻止重新分解,直到功能實現,以防萬一你需要改變其他任何東西。你可以嘗試去http://codereview.stackexchange.com/來幫助清理它。 (但首先查看他們的常見問題,我不是那裏的主題。) – David 2012-01-04 18:31:52

+0

感謝您的幫助 – HGomez90 2012-01-04 18:37:26

相關問題