为什么Insert Into语句会创建一个新行?

时间:2017-05-15 09:15:59

标签: database vb.net ms-access

我的insert into语句正在创建一个新行。我认为这是因为if语句。

以下是我的代码示例:

Dim blanco = "Ja"
Dim blanco1 = "Nee"

With cmd
    .CommandText = "INSERT INTO Workflow ([DossierPad]) VALUES ('" + Mid(stukjes(0), 1, 58) + "')"
    .ExecuteNonQuery()
    .CommandText = "INSERT INTO Data ([DossierPad], [Tif], [Grootte]) VALUES ('" + Mid(stukjes(0), 1, 58) + "','" + Mid(stukjes(0), 59, 71) + "','" + stukjes(2) + "')"
    .ExecuteNonQuery()
    If stukjes(2) < 20000 Then
        .CommandText = "INSERT INTO Data ([Blanco]) VALUES ('" + blanco + "')"
        .ExecuteNonQuery()
    Else
        .CommandText = "INSERT INTO Data ([Blanco]) VALUES ('" + blanco1 + "')"
        .ExecuteNonQuery()
    End If
End With

插入数据[Blanco],这在if语句中会在我的数据库中创建一个新行。

这是每次我尝试插入内容时会发生什么的图片:

enter image description here

如您所见,数据库会创建一个新行,但必须位于同一行内。

2 个答案:

答案 0 :(得分:1)

执行INSERT语句以在Workflow和Data表中创建新行后,您在If-Else语句中再次使用INSERT。从逻辑上讲,这将再次创建一个新行。

要更新现有行,您需要使用UPDATE关键字。以下是更新查询的语法:

UPDATE table
SET column1 = expression1,
    column2 = expression2,
    ...
[WHERE conditions];

这也让我想知道你为什么不在第一个INSERT查询中插入值。

答案 1 :(得分:1)

这很正常。我认为你没有读过很多关于SQL Syntax的内容。

插入用于向数据库添加新行。

更新用于更改数据。

在你的代码中,你首先要做:

"INSERT INTO Data ([DossierPad], [Tif], [Grootte]) VALUES ('" + Mid(stukjes(0), 1, 58) + "','" + Mid(stukjes(0), 59, 71) + "','" + stukjes(2) + "')"

然后你这样做:

"INSERT INTO Data ([Blanco]) VALUES ('" + blanco + "')"
                    .ExecuteNonQuery()

因此你有两个插页。

如果您只想更改所需的空白更新声明:

If stukjes(2) < 20000 Then
    .CommandText = "UPDATE Data SET Blanco = '" & blanco & "' WHERE DossierPad = '" & Mid(stukjes(0), 1, 58) & "'"
    .ExecuteNonQuery()
Else
    .CommandText = "UPDATE Data SET Blanco = '" & blanco1 & "' WHERE DossierPad = '" & Mid(stukjes(0), 1, 58) & "'"
    .ExecuteNonQuery()
End If

注意:

  • 正如阿巴斯所指出的,如果DossierPad 独特
  • ,这只是一个好习惯
  • 否则,请使用主键确保不更新错误的行