Sql 为什么MS Access数据库不更新?

Sql 为什么MS Access数据库不更新?,sql,vb.net,ms-access,Sql,Vb.net,Ms Access,我遇到的另一个SQL查询问题。如果有人能帮忙,我们将不胜感激 不会抛出错误(使用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

我遇到的另一个SQL查询问题。如果有人能帮忙,我们将不胜感激

不会抛出错误(使用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是一个标签

我还用以下语法编写了每个参数,只是为了看看我的代码是否有问题。但输出相同,没有数据库更新,但没有错误

我有一个较小的变化,这一代码的工作,但我不知道为什么,因为它是一个确切的副本中添加了更多的表达式

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

您的参数不能以数字开头

请参见此处:

而不是像
@1
@2
等名称,
使用
@p1
@p2


(这样,您仍然可以动态生成它们。)

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

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

update FDSL set Hostname=?, Owner=? where ID=?
并按参数在查询中出现的顺序添加参数


但是,在这种情况下,您应该会得到一个错误,因此可能会有其他东西吞没异常。

这是我提到的工作代码。#如果您最后添加@ID参数,因为它是查询中的最后一个,会怎么样?(可能Access只使用位置参数,而不使用命名参数)我猜与@HansKesting相同的参数顺序可能很重要。好吧,我来试试,伙计们。实际上没有更改。您正在运行调试版本还是发布版本?如果您正在调试,可能您正在更新项目目录上bin\debug文件夹中的数据库副本,它们实际上不是以数字开头的,我为数据保护指定了数字。无论如何谢谢你!这就是问题所在,你提到的摘录实际上是按原样工作的。按照建议,这样做是为了防止SQLinjection。然而,main expert不起作用。这实际上解决了部分问题,它将Sysid作为字符串读取,而预期它是整数。我不得不改变数据库,以允许它,但感谢提示!你说解决了部分问题。。。你还有其他问题吗?还是你自己解决了?你的想法解决了一半问题,我自己想了想后解决了另一部分问题。正如我所说,它将SYSid读取为字符串,但它存储为double。因此,使用您的解决方案将其声明为整数并更改后端使其工作。