【问题标题】:Choose from selected values from the form to populate one column in the DB table从表单中选择选定的值以填充数据库表中的一列
【发布时间】:2013-05-02 09:22:39
【问题描述】:

我已经成功地将 vb.net 表单字段中的数据提交到具有自动递增唯一 ID 的 SQL 表中。我遇到的问题是我有多个具有相同字段名称的表单字段。例如,我会在我的数据库中使用一个字段来接受来自表单上 TextBox1、TextBox2、TextBox3 或 TextBox4 的数据。这可能吗?

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    Using message As New MailMessage()
        Dim iReturn As Boolean

        Using con As New SqlConnection("Server=SGI-NOT-TTID01;Database=Commission;uid=****;pwd=******")
            Using com As New SqlCommand()
                With com
                    .CommandText = "INSERT INTO InputTable VALUES (@UniqueRequestNumber, @BusinessUnit, @ReasonCode, @Originator, @OnBehalfofName, @OnBehalfofEmail, @SalesTeam_CS, @SalesTeam_MISDBM, @DateEffectiveFrom, @DateEffectiveTo, @CustomerClientName, @CustomerAccNum, @MovingTo, @JustificationComments, @NewBusOrRenewal, @OthersImpacted, @ReasonCode2, @Target, @TargetPeriod, @ProposedScheme, @NewOTC, @ExistingRole, @Amount, @CustomerImapcted, @CurrentOTC, @PoundsInPocketEst, @NewRole ) "
                    .Connection = con
                    .CommandType = CommandType.StoredProcedure
                    .CommandText = "AddUniqueRequestNumberWithOutput"
                    .Parameters.AddWithValue("@UniqueRequestNumber", ParameterDirection.Output)
                    .Parameters.AddWithValue("@BusinessUnit", ComboBox1.Text)
                    .Parameters.AddWithValue("@ReasonCode", ComboBox4.Text)
                    .Parameters.AddWithValue("@Originator", TextBox1.Text)
                    .Parameters.AddWithValue("@OnBehalfofName", TextBox2.Text)
                    .Parameters.AddWithValue("@OnBehalfofEmail", TextBox3.Text)
                    .Parameters.AddWithValue("@SalesTeam_CS", ComboBox2.Text)
                    .Parameters.AddWithValue("@SalesTeam_MISDBM", ComboBox3.Text)
                    .Parameters.AddWithValue("@DateEffectiveFrom", DateTimePicker1.Text)
                    .Parameters.AddWithValue("@DateEffectiveTo", DateTimePicker2.Text)
                    .Parameters.AddWithValue("@CustomerClientName", TextBox4.Text)
                    .Parameters.AddWithValue("@CustomerAccNum", TextBox5.Text)
                    .Parameters.AddWithValue("@MovingTo", TextBox6.Text)
                    .Parameters.AddWithValue("@JustificationComments", TextBox7.Text)
                    .Parameters.AddWithValue("@NewBusOrRenewal", ComboBox6.Text)
                    .Parameters.AddWithValue("@OthersImpacted", TextBox13.Text)
                    .Parameters.AddWithValue("@ReasonCode2", ComboBox5.Text)
                    .Parameters.AddWithValue("@Target", TextBox5.Text)
                    .Parameters.AddWithValue("@TargetPeriod", ComboBox7.Text)
                    .Parameters.AddWithValue("@ProposedScheme", TextBox24.Text)
                    .Parameters.AddWithValue("@NewOTC", TextBox17.Text)
                    .Parameters.AddWithValue("@ExistingRole", TextBox19.Text)
                    .Parameters.AddWithValue("@Amount", TextBox8.Text)
                    .Parameters.AddWithValue("@CustomerImpacted", TextBox12.Text)
                    .Parameters.AddWithValue("@CurrentOTC", TextBox16.Text)
                    .Parameters.AddWithValue("@PoundsInPocketEst", TextBox10.Text)
                    .Parameters.AddWithValue("@NewRole", TextBox20.Text)

                End With
                Try
                    con.Open()
                    com.ExecuteNonQuery()
                    iReturn = True
                Catch ex As SqlException
                    MsgBox(ex.Message.ToString)
                    iReturn = False
                Finally
                    con.Close()
                End Try

                    'set to the from, to and subject fields
                    message.From = (New MailAddress(TextBox3.Text.ToString()))
                    message.[To].Add(New MailAddress("benjamin.boothe@experian.com"))
                    message.Subject = "Request Number"

                    If Not attachmentList Is Nothing Then
                    For Each attachment As System.Net.Mail.Attachment In attachmentList
                            message.Attachments.Add(attachment)
                        Next
                    End If



                    'display submitted box
               MessageBox.Show("Your request has been submitted!", "Congratulations!")
                    'close form
                    Me.Close()

                    Dim client As New SmtpClient()
                    client.Host = "mailhost"
                    client.Send(message)






            End Using
        End Using



    End Using

    Return
End Sub

所以这个函数背后的逻辑如下:

  1. 将值提交到 SQL Server 中的表。
  2. 发送电子邮件(可选附件)。

【问题讨论】:

  • 所以您希望您的数据库字段存储多个文本框的值?
  • 是的。不过不是同时。仅取决于表单上填充了哪个文本框。

标签: vb.net sql-server-2005


【解决方案1】:

您可以编写一个私有函数来搜索文本框并返回第一个文本框的内容。

Private Function SearchBehalfText() As String
    Dim behalfOf = TextBox3.Text.Trim
    if behalfOf.Length = 0 then 'textbox3 is empty, check the next one '
        behalfOf = TextBox4.Text.Trim
        if behalfOf.Length = 0 then  'textbox4 is empty, check the next one '
             ...... mode test here if you have more textboxes, stop when all the textboxes are verified for empty
        End If
    End If
    return behalfOf
End Function

现在你创建参数的代码可以写成

.Parameters.AddWithValue("@OnBehalfofEmail", SearchBehalfText())

我觉得这个场景有点弱。使用此信息恢复适当的文本框是不可行的

【讨论】:

  • 感谢史蒂夫。但这不起作用,因为我创建参数的代码位于另一个私有函数中,该函数是提交表单的按钮单击。如果这对你有意义?....
  • 我不明白你打算如何从文本框中检索值。当您设置参数值时,您应该选择要使用的文本框内容。如果它们不可用,您需要在此处传递该值。上面一行的代码可能更多一些,并且对上下文的澄清会有所帮助
  • 好的,史蒂夫,我希望这对你来说更清楚一点。我在顶部编辑了我的问题。只是看不出我将如何将您的声音,合乎逻辑的解释添加到我的复杂功能中。谢谢。
  • 只需将我在答案中给出的函数添加到您的Button3_Click 所在的同一类中。然后更改创建参数@onBehalfofEmail 的行,如上所述。而不是尝试将两个或多个文本框文本组合在一起,而是调用函数SearchBehalfText,该函数从您决定用于该字段的文本框之一返回字符串
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-23
  • 1970-01-01
  • 2021-09-21
相关资源
最近更新 更多