我们使用了带有MSDAORA作为提供程序的Oracle 11g,但是由于将不推荐使用MSDAORA,因此我们必须转到连接字符串的新提供程序。我们现在也正在使用Oracle Client 12c
在使用之前:Provider = MSDAORA.1;密码= ;用户ID = ;数据源= **** 11G 。世界;坚持安全信息=真
现在,我们尝试使用:Provider = OraOLEDB.Oracle; OLEDB.NET = true; PLSQLRSet = true;密码= ;用户ID = *;数据源= **** 11G.world;持久安全信息=真实
问题是IIS崩溃,我们遇到了这个异常,我们已经尝试解决这个问题了好几个星期了,但是还没有运气:
异常详细信息
SystemAccessViolationException 尝试读取或写入受保护的内存。这通常表明其他内存已损坏。
这是一个简单的最小复制品:
Public Sub LoadGrid()
Dim ocn As OleDbConnection = New OleDbConnection("Provider=OraOLEDB.Oracle;OLEDB.NET=true;PLSQLRSet=true; Password=*****;User ID=*****;Data Source=****11G.world;Persist Security Info=True")
Dim oda As New OleDbDataAdapter
Dim odataSet As New DataTable
Dim opm As OleDbParameter
Dim oCmd As New OleDbCommand
opm = New OleDbParameter("pi_language_code", OleDbType.Char)
opm.Value = "E"
oCmd.Parameters.Add(opm)
opm = New OleDbParameter("pi_year_id", OleDbType.Integer)
opm.Value = "2020"
oCmd.Parameters.Add(opm)
opm = New OleDbParameter("pi_month_id", OleDbType.Integer)
opm.Value = "2"
oCmd.Parameters.Add(opm)
opm = New OleDbParameter("pi_program_id", OleDbType.Integer)
opm.Value = "4"
oCmd.Parameters.Add(opm)
opm = New OleDbParameter("pi_location_id", OleDbType.Integer)
opm.Value = "2"
oCmd.Parameters.Add(opm)
Try
ocn.Open()
oCmd.Connection = ocn
oCmd.CommandType = CommandType.StoredProcedure
oCmd.CommandText = "***********"
oCmd.ExecuteNonQuery()
oda.SelectCommand = oCmd
odataSet.Clear()
oda.Fill(odataSet) 'This is where it crashes
Dim rowcount As Integer = odataSet.Rows.Count
dgCurrentYear.DataSource = odataSet
dgCurrentYear.DataBind()
If rowcount > 0 Then
dgCurrentYear.Visible = True
Else
dgCurrentYear.Visible = False
End If
Catch ex As OleDbException
' Display the error
Catch ex As Exception
' Display the error
Finally
' Clean up
If (Not ocn Is Nothing) AndAlso (Not ocn.State = ConnectionState.Closed) Then
ocn.Close()
End If
ocn = Nothing
opm = Nothing
End Try
End Sub
答案 0 :(得分:0)
因此我们通过删除行oCmd.ExecuteNonQuery()
因为我不必调用ExecuteNonquery,因为DataAdapter的fill方法可以解决这个问题。 Programming Practice: Using ExecuteNonQuery with SqlDataAdapter