为什么MS Access DB不会更新?

时间:2013-12-09 10:34:30

标签: sql vb.net ms-access

我遇到的另一个SQL Query问题。如果有人能提供帮助,我们将不胜感激。

不会抛出任何错误(使用Try语法),但它不会更新数据库。

    Dim con As OleDbConnection = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source='\\$$$$\$$$$\$$$$.accdb';")

Dim str As String
        str = "update Layer_1 set 1=@1, 2=@2, 3=@3, 4=@4, 5=@5, 6=@6, 7=@7, 8=@8, 9=@9, 10=@10 where ID=@id"
        Dim cmd As New OleDbCommand(str, con)

    cmd.Parameters.AddWithValue("@1", val2.Text)
    cmd.Parameters.AddWithValue("@2", val3.Text)
    cmd.Parameters.AddWithValue("@3", val4.Text)
    cmd.Parameters.AddWithValue("@4", val5.Text)
    cmd.Parameters.AddWithValue("@5", val6.Text)
    cmd.Parameters.AddWithValue("@6", val7.Text)
    cmd.Parameters.AddWithValue("@7", val8.Text)
    cmd.Parameters.AddWithValue("@8", val9.Text)
    cmd.Parameters.AddWithValue("@9", val10.Text)
    cmd.Parameters.AddWithValue("@10", val11.Text)
        cmd.Parameters.AddWithValue("@ID", SysID.Text)
    con.Open()
    cmd.ExecuteNonQuery()
    con.Close()

所以Val [#]。Text是一个文本框,而SysId是一个标签,

我也用以下语法编写了每个Param,只是为了查看我的代码是否有问题。但它的输出相同,没有DB更新但没有错误。

我确实有这个代码的较小变体,但是我不知道为什么,因为它是添加了更多表达式的精确副本。

Dim str As String
str = "update FDSL set Hostname=@Hostname, Owner=@Owner where ID=@id"
Dim cmd As New OleDbCommand(str, con)
cmd.Parameters.AddWithValue("@Hostname", TextBox1.Text)
cmd.Parameters.AddWithValue("@Owner", TextBox2.Text)
cmd.Parameters.AddWithValue("@ID", textbox6.Text)
con.Open()
cmd.ExecuteNonQuery()
con.Close()

任何想法?

干杯, TAD

3 个答案:

答案 0 :(得分:2)

在你所拥有的那个中,你有cmd.Parameters.AddWithValue(“@ ID”,textbox6.Text),它链接到一个文本框。不起作用的那个有cmd.Parameters.AddWithValue(“@ ID”,SysID.Text),你说它是一个标签的链接。我不明白为什么会有所作为,但你可以尝试一个只读文本框,看看是否有效。也是您的ID字符串或数字。我倾向于将我的ID参数转换为整数,而不是直接从文本框中使用数字字符串值。例如cmd.Parameters.AddWithValue(“@ ID”,CInt(SysID.Text))

答案 1 :(得分:0)

您的参数不能以数字开头。

见这里:
SQL Server - Invalid characters in parameter names

而不是@1@2等名称,而不是 使用@p1@p2等 (这样你仍然可以动态生成它们。)

答案 2 :(得分:0)

OleDbCommand不支持命名参数。请改用:

update FDSL set Hostname=?, Owner=? where ID=?

按照查询中显示的顺序添加参数。

但是在这种情况下应该收到错误,所以其他东西可能会吞下异常。