为啥我的代码在“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()”之后停止?的主要内容,如果未能解决你的问题,请参考以下文章