[英]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.