【发布时间】:2014-06-03 12:23:56
【问题描述】:
我在 Visual Studio 中使用 UPDATE 命令时遇到了一些问题。
我会直入主题。
我有一个 MS Access 关系数据库后端,我已经在 vb 中连接了它,我可以显示记录等,但是我无法更新它。 我在 Form_Load 中有这个
Dim strQuery As String = "SELECT ContractID AS [Contract ID], ProductName AS [Product Name], SigningDate AS [Date Signed], StartDate AS [Start Date], EndDate AS [End Date] FROM ((PolicyContract) INNER JOIN Clients on PolicyContract.ClientID = Clients.ClientID) INNER Join Products on PolicyContract.ProductID = Products.ProductID WHERE PolicyContract.ClientID = '" + clientID + "' ORDER BY PolicyContract.ContractID;"
'initialise the data adapter
daPolicyContract = New OleDbDataAdapter(strQuery, connection)
'initialise the dataset
dsAllroundInsurance = New DataSet
'fill the dataset
daPolicyContract.Fill(dsAllroundInsurance, "PolicyContract")
'bind data grid to data in PolicyContract table
dgvPolicies.DataSource = dsAllroundInsurance.Tables("PolicyContract")
'autosize columns to fit grid size
dgvPolicies.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
它工作正常,它显示正确的记录,但我想更新记录。
当我单击一个按钮时,我想更新特定合同的“结束日期”值。当我执行这个命令时:
UPDATE ((PolicyContract)
INNER JOIN Clients
ON PolicyContract.ClientID = Clients.ClientID)
INNER JOIN Products
ON PolicyContract.ProductID = Products.ProductID
SET PolicyContract.EndDate = '1/1/1111'
WHERE PolicyContract.ContractID = 'C100102';
在 MS Access 中正确更新,所以命令没问题。当我尝试在这样的单击事件处理程序中执行命令时:
daPolicyContract.UpdateCommand = New OleDbCommand("UPDATE ((PolicyContract) INNER JOIN Clients ON PolicyContract.ClientID = Clients.ClientID) INNER JOIN Products ON PolicyContract.ProductID = Products.ProductID SET PolicyContract.EndDate = '1/1/1111' WHERE PolicyContract.ContractID = 'C100102';", connection)
什么都没有发生,我没有收到错误消息,但它仍然没有更新。我很确定 vb 正在执行命令,但它没有更新数据库。
任何帮助将不胜感激,谢谢。
【问题讨论】:
-
你有一个 SQL 注入漏洞。
-
你执行命令了吗? (我的意思是你叫 daPolicyContract.Update() 吗?
-
这是一个学校项目 SQL 注入漏洞不是问题。是的,我将上面的 vb 更新命令放在了单击事件处理程序中,当我单击按钮时,命令执行时没有错误,但是如果我重新加载表单或在 MS 访问中检查数据库,它还没有更新。
标签: sql vb.net visual-studio-2012 sql-update