Vb.net 无法打开更多表-OLEDBEException未处理
你好, 我的问题是如何处理异常或消除与无法打开更多表有关的错误。为了对我正在创建的程序进行概述,我在ms access 2007中拉出了subject的记录,我循环到该记录以随机分配一个时间表,然后一个接一个地将分配了时间表的新记录插入表中 我插入记录的程序流程只工作了一定的次数,比如几乎200次,在某个时候它停止并弹出OLEDBEException 提前感谢您抽出时间回答我的问题 这是我的代码,可以更详细地概述我的程序Vb.net 无法打开更多表-OLEDBEException未处理,vb.net,visual-studio,ms-access-2007,Vb.net,Visual Studio,Ms Access 2007,你好, 我的问题是如何处理异常或消除与无法打开更多表有关的错误。为了对我正在创建的程序进行概述,我在ms access 2007中拉出了subject的记录,我循环到该记录以随机分配一个时间表,然后一个接一个地将分配了时间表的新记录插入表中 我插入记录的程序流程只工作了一定的次数,比如几乎200次,在某个时候它停止并弹出OLEDBEException 提前感谢您抽出时间回答我的问题 这是我的代码,可以更详细地概述我的程序 Private Sub Assignsched(ByVal rType A
Private Sub Assignsched(ByVal rType As String, ByVal subjectCode As String, ByVal SecID As String, ByVal CourseCode As String)
If shrdcon.con.State = ConnectionState.Closed Then
shrdcon.con.Open()
End If
Dim RoomNum As Integer
dtARoom.Clear()
Dim stoploop As Boolean
Dim count As Integer = 0
Dim rm1 As String
RoomAssign = ""
rm1 = "SELECT * FROM tblRoom WHERE RoomType = '" & rType & "'"
Dim dat As New OleDbDataAdapter(rm1, shrdcon.con)
dat.Fill(ds, "ARoom")
stoploop = False
count = 0
Do Until stoploop = "True"
RoomNum = rndm.Next(0, ds.Tables("ARoom").Rows.Count)
RoomAssign = ds.Tables("ARoom").Rows(RoomNum).Item(1)
ScheduleGeneration()
If checkExisting(sTime, eTime, RoomAssign, daypick) = False Then
RoomA = RoomAssign
GenerateOfferingID()
Dim cmd1 As New OleDbCommand()
cmd1.CommandText = "INSERT INTO [tblSubjectOffer]([SubjectOID],[SubjectCode],[SectionID],[Day],[sTime],[eTime],[RoomName],[CourseCode]) VALUES('" & _
myId & "','" & subjectCode & "','" & SecID & "','" & daypick & "'," & sTime & "," & eTime & ",'" & RoomA & "','" & CourseCode & "')"
cmd1.Connection = shrdcon.con
cmd1.ExecuteNonQuery()
cmd1.Dispose()
Dim pipz As New OleDbCommand("Update tblGenerator Set NextNo='" & myId & "' where TableName ='" & "tblSubjectOffer" & "'", shrdcon.con)
pipz.ExecuteNonQuery()
pipz.Dispose()
stoploop = True
Else
stoploop = False
End If
If stoploop = False Then
If count = 30 Then
stoploop = True
Else
count = count + 1
End If
End If
Loop
End Sub
当您超过Microsoft Jet数据库引擎允许的最大打开表ID数时,Microsoft Jet引擎会发生这种典型错误,Jet3.5引擎的最大打开表ID数为2048,旧引擎的最大打开表ID数为1024 即使每次使用后都关闭命令对象,但在整个过程中仍然使用相同的连接,该连接实际上保存了TableID,并且在某个时间点超过了允许打开的TableID的数量 一个可能的解决方案是用最新的更新喷气发动机,这是可用的 它可能会解决您的问题,但如果您已经在使用最新的引擎,则必须考虑其他选项以减少DB操作的数量 尝试使用将更新作为批应用的方法 希望这有帮助
Private Sub Command1_Click()
Dim myConnection As ADODB.Connection
Dim rsData As ADODB.Recordset
Set myConnection = New ADODB.Connection
myConnection.ConnectionString = "xxxxxxxxxxxxxxxxxxxx"
myConnection.Open
Set rsData = New ADODB.Recordset
rsData.CursorLocation = adUseClient
rsData.Open "select * from mytable", myConnection, adOpenStatic, adLockBatchOptimistic
For i = 1 To 10000
rsData.AddNew
rsData.Fields(0).Value = 1
rsData.Fields(1).Value = 2
Next i
rsData.UpdateBatch
rsData.Close
myConnection.Close
Set rsData = Nothing
End Sub
晚上好,,
最近我遇到了这种类型的错误,我可以通过添加
con.close并调用conState一个过程conState-在任何insert/update或select语句之前检查以下内容
在我的代码中,我有
For i = 0 To DataGridView1.RowCount - 1
reg = DataGridView1.Rows(i).Cells(0).Value
Label2.Text = reg
'i added this two lines
***con.Close()***
***Call conState()***
Dim cmdcheck As New OleDbCommand("Select * from [2015/2016 UG CRF] where regno ='" & reg & "'", con)
Dim drcheck As OleDbDataReader
drcheck = cmdcheck.ExecuteReader
If drcheck.Read = True Then
GoTo A
End If
coursesFirst = String.Empty
coursesSecond = String.Empty
creditFirst = 0
creditSecond = 0
Dim cmdlevel As New OleDbCommand("Select * from [2015/2016 UG registration Biodata 5 april 16] where regno ='" & reg & "'", con)
Dim drlevel As OleDbDataReader
drlevel = cmdlevel.ExecuteReader
If drlevel.Read = True Then
level = drlevel.Item("level").ToString
faculty = drlevel.Item("faculty").ToString
program = drlevel.Item("programme").ToString
End If
...............
next
conState是一个连接测试,如果连接关闭,应该像下面一样再次打开它
Public Sub conState()
If con.State = ConnectionState.Closed Then
con.Open()
End If
End Sub
这会停止错误消息我在C应用程序中遇到此异常,原因是使用OleDbDataReader实例而未关闭它们:
OleDbDataReader reader = cmd.ExecuteReader();
bool result = reader.Read();
reader.Close(); // <= Problem went away after adding this
return result;
和你的问题一样,正如我对UpdateBatch的理解,在一个命令中一次更新两个或多个记录是否正确?我从您那里得到一个主意,在我将记录作为批插入access数据库之前,先将其添加到datatable中,但随着我的研究的进行,我仍然找不到如何制作它possible@Arvin编辑我的答案以包含UpdateBatchI示例。我认为您的示例代码不适用于visual studio,我尝试了你的代码,它得到了一个错误,纠正我,如果我错了,你的代码只适用于vb6吗?我尝试将数据库迁移到sql express,但不确定是否遇到与ms access相同的问题。谢谢@Saagar,无需回答我之前的评论,因为我已经通过将数据库更改为sql express解决了问题。