日期:2014-05-17  浏览次数:20520 次

易语言程序通过外网访问内网MSSQL数据库问题
首先说明一下,我是学习易语言的,这里虽然主要是以微软工具为主,但我还是想在这里请教一下高手们,希望大家能帮我解决下,谢谢!问题如下:

我的网络环境是这样的(家中),电脑是通过光纤宽带连接的,连接猫的是一个无线宽带的路由器,然后路由器上面连接的就是电脑(真实机),连接路由器后,电脑真机就处在一个局域网当中了,有自己的局域网IP,然后在电脑真机当中我建了两个虚拟机(vmware),两台虚机也都有自己的局域网IP,两个虚机是通过桥接方式与真机连接的(也可以改成NAT方式),它们都是单网卡的虚机。在一台虚机上面我建了个WEB站点(当WEB服务器用),同时这台虚机上面也装了MSSQL2005数据库。然后我在路由器上面将这台虚机设置了端口映射,做WEB服务器时,端口是80,IP写的是192.168.1.102(这台虚机的局域网地址),这时通过公网访问网页是成功的。
因为在这台虚拟机上装有MSSQL数据库,所以我又在路由器中又添加了一个端口映射,端口写的是数据库的默认端口1433,然后IP处同样写的是这台虚拟机的局域网地址(192.168.1.102)。想让别人从公网用软件客户端连接到虚拟机上的数据库。我以为这样就可以了,但是没成功!


我现在的问题是:我自已用易语言写的通过公网连接数据库的程序,在静态编译后发给别人,在别人机器上运行,却显示数据库连接失败!这是怎么回事呢?哪位朋友能帮我解决下呢?究竟怎么做我才能让程序通过公网连接数据库成功呢?


下面是我自己写的程序,试验用的(全部的代码)


.版本 2
.支持库 eDB
.程序集 窗口程序集1
.子程序 __启动窗口_创建完毕
全局_数据库连接 = 数据库连接1
全局_记录集 = 记录集1
.如果真 (全局_数据库连接.连接SQLServer (“221.205.193.139”, “temp”, “sa”, “123456”) = 假)
    信息框 (“数据库没有连接成功”, 0, )
    结束 ()
.如果真结束
全局_记录集.置连接 (全局_数据库连接)
载入 (窗口1, , 真)




.版本 2
.支持库 eDB
.程序集 窗口程序集2
.子程序 _按钮1_被单击
.局部变量 局部_语句, 文本型
.局部变量 局部_数量, 整数型
局部_语句 = “select count(*) as [数量] from [用户表] where [yonghuming] ='” + 窗口1.编辑框1.内容 + “'and [mima]='” + 窗口1.编辑框2.内容 + “'”
.如果真 (全局_记录集.打开 (局部_语句, #SQL语句) = 假)
    信息框 (“查询失败”, 0, )
    返回 ()
.如果真结束
.如果真 (全局_记录集.读整数 (“数量”, 局部_数量) = 假)
    信息框 (“查询失败”, 0, )
    返回 ()
.如果真结束
.如果真 (局部_数量 > 0)
    信息框 (“查询成功”, 0, )
    载入 (_启动窗口, , 真)
    返回 ()
.如果真结束
信息框 (“查询失败”, 0, )
.子程序 _按钮2_被单击
结束 ()


希望知道的朋友能指导一下,如果方便的话,留下QQ号码等通信方式,方便交流!
大家详细帮我指导下吧!谢谢!(这个问题让我非常苦恼!)

------解决方案--------------------
别人无论是访问你的web服务器还是数据库服务器,地址首先都应该是路由器获取的那个公网IP地址。
如果你确认端口映射没有问题,那就尝试给SQL Server换一个端口吧,1433映射在外网=自寻死路啊