无法更新当前锁定的vb.net错误

无法更新当前锁定的vb.net错误,vb.net,sql-insert,Vb.net,Sql Insert,我想在ms access的2个不同表中插入2个不同的数据 它显示了这个错误 我有这样一个代码: try dim sql1,sql2 as string sql1 = "INSERT INTO table1(something)VALUES(something)" cmd = new oledbcommand(sql1, connection) cmd.executenoquery() sql2 = "INSERT INTO table2(something)VALUES(somet

我想在ms access的2个不同
表中插入2个不同的数据

它显示了这个错误

我有这样一个代码:

try
 dim sql1,sql2 as string
 sql1 = "INSERT INTO table1(something)VALUES(something)"
 cmd = new oledbcommand(sql1, connection)
 cmd.executenoquery()

 sql2 = "INSERT INTO table2(something)VALUES(something)"
 cmd2 = new oledbcommand(sql2, connection)
 cmd2.executenoquery()
catch ex as exception
  msgbox(ex.tostring())

(where these cmd1,cmd2 are defined in controlModule.)
那么,我该怎么办


感谢您的帮助。谢谢

我认为关闭连接可以解决问题,最好使用
使用
-语句:

try
    Using con As OleDbConnection = GetConnection() ' or New OlebConnection(...)
        Using cmd = con.CreateCommand()
            cmd.CommandText = "INSERT INTO table1(something)VALUES(@something)"
            cmd.Parameters.AddWithValue("@something", something)
            con.Open()
            cmd.ExecuteNonQuery()
        End Using
    End Using 

    Using con As OleDbConnection = GetConnection()
        Using cmd = con.CreateCommand()
            cmd.CommandText = "INSERT INTO table2(something)VALUES(@something)"
            cmd.Parameters.AddWithValue("@something", something)
            con.Open()
            cmd.ExecuteNonQuery()
        End Using
    End Using 
Catch ex As Exception
    msgbox(ex.tostring())
End Try 

我认为关闭连接可以解决问题,最好使用
using
-语句:

try
    Using con As OleDbConnection = GetConnection() ' or New OlebConnection(...)
        Using cmd = con.CreateCommand()
            cmd.CommandText = "INSERT INTO table1(something)VALUES(@something)"
            cmd.Parameters.AddWithValue("@something", something)
            con.Open()
            cmd.ExecuteNonQuery()
        End Using
    End Using 

    Using con As OleDbConnection = GetConnection()
        Using cmd = con.CreateCommand()
            cmd.CommandText = "INSERT INTO table2(something)VALUES(@something)"
            cmd.Parameters.AddWithValue("@something", something)
            con.Open()
            cmd.ExecuteNonQuery()
        End Using
    End Using 
Catch ex As Exception
    msgbox(ex.tostring())
End Try 

这是一个并发问题。因为代码的其他部分或MS Access本身会同时访问数据库。 事实上,在连接使用后,您不会关闭它。因此,第二次调用应该会失败,并出现该异常。相反,您应该在using语句中包装一次性用品,例如OLEDB连接、命令等。这样,即使发生异常,连接也将关闭:

    Using con As New OleDbConnection, cmd1 As OleDbCommand = con.CreateCommand, cmd2 As OleDbCommand = con.CreateCommand()
        cmd1.CommandText = "INSERT INTO table1(something)VALUES(something)"
        cmd1.ExecuteNonQuery()

        cmd2.CommandText = "INSERT INTO table2(something)VALUES(something)"
        cmd2.ExecuteNonQuery()
    End Using

这是一个并发问题。因为代码的其他部分或MS Access本身会同时访问数据库。 事实上,在连接使用后,您不会关闭它。因此,第二次调用应该会失败,并出现该异常。相反,您应该在using语句中包装一次性用品,例如OLEDB连接、命令等。这样,即使发生异常,连接也将关闭:

    Using con As New OleDbConnection, cmd1 As OleDbCommand = con.CreateCommand, cmd2 As OleDbCommand = con.CreateCommand()
        cmd1.CommandText = "INSERT INTO table1(something)VALUES(something)"
        cmd1.ExecuteNonQuery()

        cmd2.CommandText = "INSERT INTO table2(something)VALUES(something)"
        cmd2.ExecuteNonQuery()
    End Using

你有没有在MS Access中以设计模式打开的表?@Steve没有,我没有。你有没有在MS Access中以设计模式打开的表?@Steve没有,我没有。谢谢,@Tim Schmelter。“这对我很有帮助。谢谢,”蒂姆·施梅尔特说。它帮助了我。