繁体   English   中英

解决方案将 SQL 中的文本框添加为 vb.net 中的字符串

[英]Solution add textbox in SQL as string in vb.net

如果您看到下面的代码有一个值(2000),那么解决方案是什么,那么我想将其更改为文本框,以便我可以自定义值。

谢谢

杰克

Dim sql As String = "update GSDTS as t1 inner join IFGTS as t2 on t1.[ITM] = t2.[ITM] set t1.[CIU] = t2.[PRSOBNET]+2000 WHERE GDN = 'A.04.01.002.001'AND PNM=@PNM"
Using conn As New OleDbConnection(cn),
                    cmd As New OleDbCommand(sql, conn)
    cmd.Parameters.AddWithValue("@PNM", ComboBox1.SelectedValue)
    conn.Open()
    cmd.ExecuteNonQuery()
End Using

您可以像这里一样向您的查询添加另一个参数

' Read the textbox value here'
Dim newValue as Integer
Int32.TryParse(txtInput.Text, newValue)

' Put the parameter placeholder instead of a constant'
Dim sql As String = "update GSDTS as t1 inner join IFGTS as t2 
                                  on t1.[ITM] = t2.[ITM] 
                     set t1.[CIU] = t2.[PRSOBNET]+@addvalue
                     WHERE GDN = 'A.04.01.002.001'AND PNM=@PNM"
Using conn As New OleDbConnection(cn),
     cmd As New OleDbCommand(sql, conn)
     ' Add the other parameter and its value before the old one. See note below'
     cmd.Parameters.AddWithValue("@addvalue", newValue)

     cmd.Parameters.AddWithValue("@PNM", ComboBox1.SelectedValue)

     conn.Open()
     cmd.ExecuteNonQuery()
End Using

另外,看看如何用单行 Add 替换 AddWithValue。 AddWithValue 很危险,因为它在处理日期或小数时可能会歪曲您的值,并且使用字符串效率低下

** 重要的 **
您正在使用 OleDb 提供程序。 在这种情况下,参数的添加顺序应与它们的占位符在字符串中出现的顺序相同。 所以应该在@PNM 之前添加新参数,否则在执行查询时会以错误的顺序读取它们。

您的 SQL 语法不适用于我知道的任何 RDBMS,并且您没有标记后端。 这可能仅仅是它根本不起作用的一个原因,你应该从纠正它开始。 其次,不要使用 AddWithValue 而是 Add 并明确指定您的数据类型。 话虽如此,例如将 MS SQL 服务器作为后端:

    Dim sql As String = <sql>UPDATE GSDTS
SET [CIU] = t2.[PRSOBNET] + @addVal
FROM GSDTS AS t1
    INNER JOIN IFGTS AS t2
        ON t1.[ITM] = t2.[ITM]
WHERE t1.GDN = 'A.04.01.002.001'
      AND t1.PNM = @PNM;</sql>

    Dim addVal As Integer = Nothing
    If Integer.TryParse(txtAdd.Text, addVal) Then
    Using conn As New OleDbConnection(cn),
                  cmd As New OleDbCommand(sql, conn)
            cmd.Parameters.Add("@addVal", OleDbType.Integer).Value = addVal
            cmd.Parameters.Add("@PNM", OleDbType.VarChar).Value = ComboBox1.SelectedValue
            conn.Open()
        cmd.ExecuteNonQuery()
        End Using
    End If

请注意,变量声明的顺序与它们在查询中使用的顺序相同。 这是 OleDb(位置参数)的必要条件。 如果您的后端类似于 MS SQL 服务器,那么更喜欢使用后端特定的 SqlConnection、SqlCommand(那么您也可以使用命名参数)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM