为啥我的代码在“con.Open()”之后停止?

Posted

技术标签:

【中文标题】为啥我的代码在“con.Open()”之后停止?【英文标题】:Why does my code stop after "con.Open()"?为什么我的代码在“con.Open()”之后停止? 【发布时间】:2009-12-28 04:07:15 【问题描述】:

在我的代码中,为什么在con.Open() 之后什么都不执行。 如果我逐步完成每一步,它会在con.Open() 之后结束Form1_Load 事件。

Imports System.Data.OleDb

Public Class Form1

Dim con As OleDbConnection
Dim strCon As String = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=C:\testDB.accdb"

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    con = New OleDbConnection(strCon)

    con.Open()
    MsgBox("con open")

    con.Close()
    MsgBox("con closed")

End Sub
End Class

【问题讨论】:

【参考方案1】:

听起来像是开始引发错误。

您是否尝试过使用OnError Goto Handler 类型代码来构建您的代码?请参阅On Error Statement。

如果这是 VB.NET,尝试使用 Try ... Catch 捕获异常。然后在Catch语句上设置断点,找出错误所在。

【讨论】:

把它放在 try..catch 中。它抛出一些异常。第一个是“System.InvalidOperationException:'Microsoft.ACE.OLEDB.12.0'提供程序未在本地计算机上注册。?? 嗯,这是个问题。您需要安装该驱动程序。 谢谢。我以为是 Mircrosoft Object 12.0 Library 参考。 我安装了驱动程序,但仍然遇到同样的异常。 ? @ScottK:您应该发布编译选项解决方案作为答案并接受它。【参考方案2】:

安装 MS Access 数据库引擎(使用 Microsoft.ACE.OLEDB.12.0)后,我的程序仍然无法运行。我仍然有错误:

“'Microsoft.ACE.OLEDB.12.0' 提供程序未在本地 muoteachine 上注册。”

不得不更改高级编译配置,因为我在 Windows 7 64 位上运行并且可能“...将处理器类型锁定为 32 位”。

如何更改设置:

1.工具 -> 选项。 2.勾选“显示所有设置”。 3.在左侧的树形视图中,选择“项目和解决方案”。 4.在右侧的选项中,选中“显示高级构建配置”框。 5.点击确定。 6.转到构建 -> 配置管理器... 7.在平台栏的下拉列表中选择“新建”。 8. 在第一个下拉框下选择“x86”。 9.“好”

更多信息在这里:Microsoft.ACE.OLEDB.12.0 provider is not registered

【讨论】:

更新: 对于 Visual Studio 2010,您必须转到“工具”、“设置”,并选中“专家设置”以使“构建”可见以执行第 6 步.【参考方案3】:

即使你有适当的 try catch 块,con.Open() 也需要几秒钟才能抛出异常,因为它正在等待服务器。以下错误需要一段时间才能引发异常,并且看起来好像您的 Step Into 消失了。耐心点!

“ORA-12170: TNS: 发生连接超时”

【讨论】:

【参考方案4】:

导入 System.Data.Odbc

公开课表11

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim a1, a2, a6, a3, a4, a5, a7 As String
    ' Dim a2, a6 As Integer
    a1 = txtname.Text
    a3 = txtaddress.Text
    a4 = txtcity.Text
    a5 = txtmail.Text
    a7 = txtbalance.Text
    a2 = txtmob.Text
    a6 = txtvehicles.Text
    Dim con As New OdbcConnection("DSN = crusher_schema")
    con.Open()
    MsgBox("Databse Connected", MsgBoxStyle.Information, "add")
    Dim cmd As New Odbc.OdbcCommand("insert into customer values('" & a1 & "','" & a2 & "','" & a3 & "','" & a4 & "','" & a5 & "','" & a6 & "','" & a7 & "', con")
    Dim r As Integer
    r = cmd.ExecuteNonQuery
    If r = 1 Then
        MessageBox.Show("Succesfully inserted" & r)
    Else
        MessageBox.Show("Not inserted" & r)
    End If!

Form.vb

【讨论】:

以上是关于为啥我的代码在“con.Open()”之后停止?的主要内容,如果未能解决你的问题,请参考以下文章

长存储过程在某些 exec 之后停止返回结果,为啥?

为啥我的代码停止并且不返回异常?

为啥我的程序停止并显示错误消息?

为啥我的 C# 代码在回调到 C++ COM 时会停止,直到 Task.Wait/Thread.Join?

在 con.Open() 之前测试数据库连接是不是正常

为啥我的 android 活动被停止?