为什么类中调用Conn.open打开数据库操作会出系统错误??

HAVENT 2005-09-21 10:32:26
简易说明代码如下:

Namespace A

Public Class AdoNet

Public AL_Conn As New SqlConnection
AL_Conn.ConnectionString = "uid="111";pwd="111";initial catalog="111";data source="(local)";Connect Timeout=10"

End Class

End Namespace

Namespace B

Public Class Run

Public Sub RunAdo()
Dim Ado As New A.AdoNet
Ado.AL_Conn.Open()
End Sub

End Class

End Namespace

断点测试到Ado.AL_Conn.Open()必报错“系统错误”
是否不能在同一个程序集下调用不同命名空间的Conn.Open?
我把这个生成dll用另外一个程序直接掉A.AL_Conn.Open()则没问题
头大啊~~~~
...全文
367 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
勤杂工人 2005-09-28
  • 打赏
  • 举报
回复
............关注~~~~`
HAVENT 2005-09-28
  • 打赏
  • 举报
回复
……放了好些天了啊,我等的话儿都谢了
xiluoshen2000 2005-09-28
  • 打赏
  • 举报
回复
Imports System.Data.SqlClient

Namespace A

Public Class AdoNet
Public AL_Conn As New SqlConnection("server = pwd;uid = sa;pwd = ;database = overCtrl")

End Class

End Namespace

Namespace B

Public Class Run

Public Sub RunAdo()
Dim Ado As New A.AdoNet
'Ado.AL_Conn.ConnectionString = "server = pwd;uid = sa;pwd = ;database = overCtrl"
Ado.AL_Conn.Open()
End Sub

End Class

End Namespace

或者是
Imports System.Data.SqlClient

Namespace A

Public Class AdoNet
Public AL_Conn As New SqlConnection

End Class

End Namespace

Namespace B

Public Class Run

Public Sub RunAdo()
Dim Ado As New A.AdoNet
Ado.AL_Conn.ConnectionString = "server = pwd;uid = sa;pwd = ;database = overCtrl"
Ado.AL_Conn.Open()
End Sub

End Class

End Namespace
都可以
alphaqxm 2005-09-28
  • 打赏
  • 举报
回复
Dim DoRun As Run

Dim DoRun As New Run
zsylizard 2005-09-25
  • 打赏
  • 举报
回复
对类的概念还有点问题,类没有构造函数.
sz_lgp 2005-09-25
  • 打赏
  • 举报
回复
Public AL_Conn As New SqlConnection
这是公有连接实例了,是个无内容的连接!
HAVENT 2005-09-25
  • 打赏
  • 举报
回复
晕,越讲越离题了。可以直接的调试的完整源码我都放在第七楼了,大家可以直接复制调试就行了

不设断点则会提示“未将对象引用设置到对象实例”,用断点查明错误在AL_Conn.Open上,在此句设置断点则会提示“系统错误”
sz_lgp 2005-09-24
  • 打赏
  • 举报
回复
Public AL_Conn As New SqlConnection

声明一个对外公开的组件实例,而类没有构造函数只能调用基类的构造函数,这里面有些问题,应通过构造函数或一个方法把声明的组件实例化才行。
文丹传 2005-09-24
  • 打赏
  • 举报
回复
先告诉我,加个catch(Exception ex),看看报的什么错???
HAVENT 2005-09-24
  • 打赏
  • 举报
回复
Public AL_Conn As New SqlConnection

这个只是类的一个公有变量,怎么放到构造函数里面声明啊?
何况它在定义的时候不是就已经是" New SqlConnection "实例化了吗
HAVENT 2005-09-23
  • 打赏
  • 举报
回复
to xhan2000(popeye.net)

连接字符串是完全没问题的,的确问题就出在AL_Conn上
我把AdoNet这个类生成DLL之后用其他程序调用不会有任何的问题,唯独在相同程序集的不同类下就出现这种问题了

很久以前就发现这个问题,但是一直无法解决,当初实在没办法了,把AL_Conn定义到模块里面,则一切正常了!

现在就是非常不理解为什么同一个程序集中调用不同类下的就不行,但是其他外部的就能正常调用啊~~

to hunter104(孤独的狼) njhyh(小辉)
主题的内容是我笔误,后来我发布了一个完整错误实例,外部调用完全正常,唯独自身执行会出错
njhyh 2005-09-23
  • 打赏
  • 举报
回复
al_conn.connectionstring="server=(local);database=111;user id=111;password=111"
ok!
HAVENT 2005-09-23
  • 打赏
  • 举报
回复
为了方便大家测试,我做了一个错误例子,执行表面提示“未将对象引用设置到对象实例”,跟踪进去发现就是Conn.Open这个操作会出“系统错误”

完整代码如下:
Imports System.Data.SqlClient

Namespace A

Public Class Form1
Inherits System.Windows.Forms.Form

#Region " Windows 窗体设计器生成的代码 "

Public Sub New()
MyBase.New()

'该调用是 Windows 窗体设计器所必需的。
InitializeComponent()

'在 InitializeComponent() 调用之后添加任何初始化

End Sub

'窗体重写 dispose 以清理组件列表。
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub

'Windows 窗体设计器所必需的
Private components As System.ComponentModel.IContainer

'注意: 以下过程是 Windows 窗体设计器所必需的
'可以使用 Windows 窗体设计器修改此过程。
'不要使用代码编辑器修改它。
Friend WithEvents Button1 As System.Windows.Forms.Button
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Me.Button1 = New System.Windows.Forms.Button
Me.SuspendLayout()
'
'Button1
'
Me.Button1.Location = New System.Drawing.Point(72, 64)
Me.Button1.Name = "Button1"
Me.Button1.Size = New System.Drawing.Size(104, 24)
Me.Button1.TabIndex = 0
Me.Button1.Text = "Button1"
'
'Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(6, 14)
Me.ClientSize = New System.Drawing.Size(292, 266)
Me.Controls.Add(Me.Button1)
Me.Name = "Form1"
Me.Text = "Form1"
Me.ResumeLayout(False)

End Sub

#End Region

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim DoRun As Run
Call DoRun.RunAdo()

End Sub
End Class

Public Class Run

Public Sub RunAdo()

Dim Ado As New B.AdoNet

Try
Ado.AL_Conn.Open()
Catch
MsgBox("Wrong", , "Title")
Finally
Ado.AL_Conn.Close()
MsgBox("OK", , "Title")
End Try

End Sub
End Class

End Namespace

Namespace B


Public Class AdoNet

Public AL_Conn As New SqlConnection("uid=111;pwd=111;initial catalog=111;data source=(local);Connect Timeout=10")

Public Sub New()
End Sub

End Class


End Namespace
HAVENT 2005-09-23
  • 打赏
  • 举报
回复
原来的字符串是变量,我为了简化说明改成具体参数但忘记去掉引号了而已

SqlConnection就在类的开始就定义了,并没有放到构造函数以及其他属性方法中去

奇怪的是这样子在同一个程序集下调用就不行,但是用别的程序直接实例化AdoNet类后就可以正常执行了
Overriding 2005-09-23
  • 打赏
  • 举报
回复
首先你的那个数据库连接字符串是不可能正确的。

其次你的AdoNet类中的sqlconnection是在什么过程里用new的?
HAVENT 2005-09-23
  • 打赏
  • 举报
回复
哦活,没人帮我解答啊……狂哭啊~~~
hunter104 2005-09-23
  • 打赏
  • 举报
回复
你把连接字符该成
server=localhost;database=111;user id=111;password=111
看看
xhan2000 2005-09-23
  • 打赏
  • 举报
回复
AL_Conn.ConnectionString = "uid=111;pwd=111;initial catalog=111;data source=local;Connect Timeout=10"
很可能是这里的问题
HAVENT 2005-09-23
  • 打赏
  • 举报
回复
等待高手来看看这个莫名其妙的问题啊~~~

来人啊~~
HAVENT 2005-09-22
  • 打赏
  • 举报
回复
不是连接字符串问题,我以前用的参数的,改成简单说明没注意

把这个程序集生成DLL之后用其他文件调用执行没有任何问题,就是在同一个程序集中,不同命名空间下调用就会出错
加载更多回复(1)

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧