VB6连接远程数据库SQL2000
服务器装XP并且已经安装好SQL2000和SQLSP4补丁,用的动态域名,测试机器和服务器不在一个网络内,用数据库企业管理器通过域名可以正常连接数据库并操作数据库,但VB...
服务器装XP 并且已经安装好SQL2000和SQL SP4补丁,用的动态域名,测试机器和服务器不在一个网络内,用数据库企业管理器 通过域名可以正常连接数据库 并操作数据库,但VB 始终提示 “找不到指定的SQL服务器”。
一下是VB 连接数据库代码 ,用局域网IP地址连接非常正常。
Public Cnn As ADODB.Connection
Public ServerName As String '服务器名
Public DBname As String '数据库名
Public UserName As String '用户名
Public PassWord As String '密码
Set Cnn = New ADODB.Connection
With Cnn
.ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=True;User ID=" & UserName & ";PWD=" & PassWord & ";Initial Catalog=" & DBname & ";Data Source=" & ServerName '&
'连接字符串
.CommandTimeout = 20 '连接等待时间
.CursorLocation = adUseClient '游标类型
.Open
End With
MsSQL.Open sql, Cnn, adOpenStatic, adLockOptimistic
我引用的是AD0是 2.1 但 引用其它版本的ADO 2.0 至 6.0 问题都一样
希望高手能够帮忙找找问题 指点一二。。。。。。。。。。。
经过多次尝试 发现 VB机器 不在同一个局域网内 如果用 SQL服务器的外网地址可以访问 通过域名则访问不了 但域名已经做了花生壳动态解析 ,现在的问题 很奇怪 如果说是域名解析问题 ,为什么用 SQL企业管理器 可以连接域名 而 VB 代码 却提示找不到服务器,难道VB ADO不支持域名连接? ping 域名能通 返回真实的IP地址 VB ADO 连接这个IP地址 则可以正常访问数据库。非常困惑这点 展开
一下是VB 连接数据库代码 ,用局域网IP地址连接非常正常。
Public Cnn As ADODB.Connection
Public ServerName As String '服务器名
Public DBname As String '数据库名
Public UserName As String '用户名
Public PassWord As String '密码
Set Cnn = New ADODB.Connection
With Cnn
.ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=True;User ID=" & UserName & ";PWD=" & PassWord & ";Initial Catalog=" & DBname & ";Data Source=" & ServerName '&
'连接字符串
.CommandTimeout = 20 '连接等待时间
.CursorLocation = adUseClient '游标类型
.Open
End With
MsSQL.Open sql, Cnn, adOpenStatic, adLockOptimistic
我引用的是AD0是 2.1 但 引用其它版本的ADO 2.0 至 6.0 问题都一样
希望高手能够帮忙找找问题 指点一二。。。。。。。。。。。
经过多次尝试 发现 VB机器 不在同一个局域网内 如果用 SQL服务器的外网地址可以访问 通过域名则访问不了 但域名已经做了花生壳动态解析 ,现在的问题 很奇怪 如果说是域名解析问题 ,为什么用 SQL企业管理器 可以连接域名 而 VB 代码 却提示找不到服务器,难道VB ADO不支持域名连接? ping 域名能通 返回真实的IP地址 VB ADO 连接这个IP地址 则可以正常访问数据库。非常困惑这点 展开
2个回答
展开全部
分析了一下你的问题,有几点问题你需要排查:
1、既然是动态域名,那么你的数据库服务器应该面对的是公网。如果是公网,局域网IP连接是否成功就毫无意义。
2、你有否尝试过使用公网IP连接,如果使用公网IP连接成功,那就有可能是域名解析的问题。
3、你是否设置好了路由器的端口映射,分析你的题目,我估计你网络状态可能是多层路由,那么多层路由的端口映射是否都设置好了?还是只设置了一层?
4、如果设置好了端口映射,是不是还有端口号的问题,虽然我没有尝试过,但是由于你的两台电脑可以通过局域网IP连接,可以看出两台电脑虽处于不同网段,但共同使用一个路由接入公网,这样会不会产生端口号冲突?可以尝试修改数据库服务器的SQL SERVER的端口号,并进行映射。
5、服务器上的数据库是使用默认实例名还是指定实例名,如果是指定实例名要在服务器名后加上实例名。
6、建议,局域网内使用局域网IP连接,局域网外使用域名连接。测试也要放在局域网外测试才有意义。
1、既然是动态域名,那么你的数据库服务器应该面对的是公网。如果是公网,局域网IP连接是否成功就毫无意义。
2、你有否尝试过使用公网IP连接,如果使用公网IP连接成功,那就有可能是域名解析的问题。
3、你是否设置好了路由器的端口映射,分析你的题目,我估计你网络状态可能是多层路由,那么多层路由的端口映射是否都设置好了?还是只设置了一层?
4、如果设置好了端口映射,是不是还有端口号的问题,虽然我没有尝试过,但是由于你的两台电脑可以通过局域网IP连接,可以看出两台电脑虽处于不同网段,但共同使用一个路由接入公网,这样会不会产生端口号冲突?可以尝试修改数据库服务器的SQL SERVER的端口号,并进行映射。
5、服务器上的数据库是使用默认实例名还是指定实例名,如果是指定实例名要在服务器名后加上实例名。
6、建议,局域网内使用局域网IP连接,局域网外使用域名连接。测试也要放在局域网外测试才有意义。
追问
麻烦 再看看我的问题补充
追答
看了你后来的补充,分析如下:
有一个可能是:企业管理器有一个功能,就是他会把域名翻译成IP地址以后再尝试连接。而你的VB程序没有把域名翻译成IP这个过程。
还有,域名解析的工作机制我没有深入了解过,推测是这样:也许我们的IE和企业管理器一样,先发送一个域名解析请求——》域名解析服务处理后回复一个IP地址——》IE或者其他通过域名访问网络的程序使用IP来访问远程数据。也就是说程序要访问远程数据最终还是要通过IP地址。
综上,我建议你在你的程序中增加一个通过域名取IP的过程或者函数,这个教程度娘的文库有(你也可以自行搜索),链接:http://wenku.baidu.com/view/d302e21ec5da50e2524d7f50.html 然后你的数据库连接程序就是用这个取得的IP进行连接。
Storm代理
2023-07-25 广告
2023-07-25 广告
StormProxies是一家国内优质海外HTTP代理商,拥有一个庞大的IP资源池,覆盖200多个地区,IP数量大且匿名度高。其优点还包括超高并发、稳定高效、技术服务等特点,同时提供HTTP、HTTPS以及SOCKS5协议支持。此外,Sto...
点击进入详情页
本回答由Storm代理提供
展开全部
你描述的可能有问题
1、如果是局域网内连接,需要设置局域网内的计算机在一个工作组,并且需要设置服务器的匿名用户的密码永不过期,并且在网上邻居中能够找到服务器,这样按照你的代码估计没有问题;
2、如果是互联网连接,问题就复杂了,首先服务器必须是互联网的服务器,并且必须设置和申请服务器的域名,因为根据网络协议,只有服务器有了域名才能被其他计算机访问。另外,对于SQL数据库,估计在互联网中需要付费的。
上面仅仅说了一个大概,详细情况你可以查阅有关文献。
1、如果是局域网内连接,需要设置局域网内的计算机在一个工作组,并且需要设置服务器的匿名用户的密码永不过期,并且在网上邻居中能够找到服务器,这样按照你的代码估计没有问题;
2、如果是互联网连接,问题就复杂了,首先服务器必须是互联网的服务器,并且必须设置和申请服务器的域名,因为根据网络协议,只有服务器有了域名才能被其他计算机访问。另外,对于SQL数据库,估计在互联网中需要付费的。
上面仅仅说了一个大概,详细情况你可以查阅有关文献。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询