【发布时间】:2020-01-06 13:56:07
【问题描述】:
我创建了一个 Windows 应用程序来将 SQL 数据库中的数据显示到 Windows 应用程序中的 gridview 中。我使用 VB.net 和 SQL 服务器来做到这一点。在 sql 查询中使用 where 条件时,我得到了满足给定数据的值。现在我需要更新显示的数据。为此,我使用了 sql 查询 Update columnName = value where(条件)。列名和值是使用文本框从用户那里获得的。当我在 Sql 中使用查询时,它工作正常并且值在数据库中得到更新。但是,当我在 VB 代码中运行相同的代码时,它不会在 Windows 应用程序中得到更新。我不明白,它的分配时间超出了我的观看时间。请帮我一个人。先谢谢了。这里附上代码。
\代码从这里开始\
Private Sub Btn_Edit_Click(sender As Object, e As EventArgs) Handles btn_Update.Click
cmdupdate.Connection = connection
connection.Open()
'table.Rows.Clear()
'table.Columns.Clear()
cmdupdate.CommandText = "update tblWebaccessErrorTrack set @columnName = @editData where IssueDateTime between @frmdate and @todate and ErrorDetails like '%' + @errorDetails + '%' and ClientIpaddress like '%'+ @IpAddress + '%' and ResponseStatus like '%'+ @responseStatus + '%' and TicketNo like '%' + @ticketNo + '%' select * from tblWebaccessErrorTrack"
table.Clear()
'"UPDATE tblWebaccessErrorTrack
' SET
' @columnName = @editData"
'"sp_Updatedata"
'Update tblWebaccessErrorTrack set TicketNo=202010 select * from tblWebaccessErrorTrack
'cmdupdate.CommandType = CommandType.StoredProcedure
cmdupdate.Parameters.Add("@frmdate", SqlDbType.DateTime).Value = frm_DateTimePicker.Text
cmdupdate.Parameters.Add("@todate", SqlDbType.DateTime).Value = to_DateTimePicker.Text
cmdupdate.Parameters.Add("@errorDetails", SqlDbType.NVarChar).Value = txtErrorDetails.Text
cmdupdate.Parameters.Add("@IpAddress", SqlDbType.NVarChar).Value = txtClientIp.Text
cmdupdate.Parameters.Add("@responseStatus", SqlDbType.NVarChar).Value = txtResponseStatus.Text
cmdupdate.Parameters.Add("@ticketNo", SqlDbType.NVarChar).Value = txtTicketNo.Text
cmdupdate.Parameters.Add("@columnName", SqlDbType.NVarChar).Value = Columnvalue '//column name
cmdupdate.Parameters.Add("@editData", SqlDbType.NVarChar).Value = txtEditdata.Text '//Data we give
adapter = New SqlDataAdapter(cmdupdate)
adapter.Fill(table)
adapter.Update(table)
DataGridView1.DataSource = table
'adapter.Fill(table)
'table.Clear()
'cmdupdate.CommandText = "select * from tblWebaccessErrorTrack" 'where IssueDateTime between @frmdate and @todate and ErrorDetails like '%' + @errorDetails + '%' and ClientIpaddress like '%'+ @IpAddress + '%' and ResponseStatus like '%'+ @responseStatus + '%' and TicketNo like '%' + @ticketNo + '%'"
'adapter = New SqlDataAdapter(cmdupdate)
'adapter.Fill(table)
'adapter.Update(table)
'DataGridView1.DataSource = table
''adapter.Fill(table)
''cmdupdate.Parameters.Clear()
'table.Clear()
connection.Close()
cmd.Parameters.Clear()
End Sub`enter code here`
- 出现在某行前面的字符 (') 表示注释行。
【问题讨论】:
-
您不能使用参数作为列名。 Can I pass column name as input parameter in SQL stored Procedure 有有用的建议。
-
这不是一个存储过程,所以 Andrew 是不正确的。仅当数据在数据库中时,更新才会起作用。您需要对新行使用 Insert。
-
@jdweng SP 与否,您不能使用参数作为列名(问题中的
set @columnName = @editData)。 SP 方面是偶然的。 -
为什么不呢?这是接受列名的 SQL Server。
-
@jdweng 列名不能是参数。它在文档中:UPDATE (Transact-SQL)。
SET column_name = expression不允许 column_name 是表达式;表达式包含一个参数。
标签: sql-server vb.net winforms