首页 > 解决方案 > 使用多行文本框进行用户输入,而不是单行 VB.net

问题描述

目前,我的应用程序使用两个单独的文本框正常工作,用户输入一个 sku 和一个订单号,然后单击一个按钮运行 SQL 查询。为了使这个应用程序更高效,我希望允许用户在多行文本框中输入订单列表,但我不确定如何设置变量以将列表传递给我的查询。

当前状态:

Private Sub btnCancelLines_Click(sender As Object, e As EventArgs) Handles btnCancelLines.Click
    MdiParent = Toolbox


    Try
        Dim orderNum As String = CStr(txtOrder.Text)
        Dim skuNum As String = CStr(txtSKU.Text)
        SQL.AddParam("@order", txtOrder.Text)
        SQL.AddParam("@SKU", txtSKU.Text)

        SQL.ExecQuery("update sop10200
                       set qtycance = qtytoinv, qtytoinv = '0', ATYALLOC = '0', QTYREMAI = '0'
                       where ITEMNMBR = @sku
                       and SOPNUMBE = @order;")
        If SQL.HasException(True) Then Exit Sub
        dgvData.DataSource = SQL.DBDT


        LoadGrid()

    Catch ex As System.InvalidCastException
        MessageBox.Show("Please use numbers",
                        "Error")
        Console.WriteLine("An error occured")
    Catch ex As Exception
        MessageBox.Show("An unknown error occured",
                        "Error")
    End Try
End Sub

我的多行文本框是 txtOrderList 显然我会将我的 SQL 查询更改为 IN 语句。

如果有人能指出我正确的方向,我将不胜感激。

标签: sqlvb.net

解决方案


有很多方法可以完成这项任务。

  1. 您可以从您的选择中构建一个XML字符串,然后将其传递到一个存储过程中,然后创建一个您可以加入的表变量。
  2. 创建一个可以在调用中拆分的分隔字符串,该字符串将插入到表变量中。

例如:

 Dim orderNums As String = String.Join(",", txtOrder.Lines)
 SQL.AddParam("@order", orderNums)
 'Execute your query...

在您的查询中...

 SQL.ExecQuery("DECLARE @tbl TABLE(OrderNums BIGINT);
                INSERT INTO @tbl(OrderNums)
                SELECT x.value
                FROM STRING_SPLIT(@order, ',') x;                     
                UPDATE sop
                SET qtycance = qtytoinv, qtytoinv = '0', ATYALLOC = '0', QTYREMAI = '0'
                FROM @tbl t
                INNER JOIN sop10200 sop
                  ON sop.SOPNUMBE = t.OrderNums                   
                WHERE sop.ITEMNMBR = @sku;
                ")

希望这将使您走上正确的轨道...以上将更新sop10200提供订单号的表格中的所有内容。


推荐阅读