Foxtable(狐表)用户栏目专家坐堂 → 多数据源问题求教


  共有3851人关注过本帖树形打印复制链接

主题:多数据源问题求教

帅哥哟,离线,有人找我吗?
hitzfeld
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:528 积分:5184 威望:0 精华:0 注册:2017/9/1 23:28:00
多数据源问题求教  发帖心情 Post By:2021/9/16 12:58:00 [显示全部帖子]

是这样的,我的客户在总部办公室有三台电脑需要连接服务器,服务器在总部。然后有分公司通过类似花生壳的软件(nat123)远程访问总部服务器。为了提高效率,我设置两个数据源,一个用总部局域网访问,一个数据源用远程访问,但是测试下来不行,直接报错,发布后,系统会先连接第一个局域网的数据源,然后直接报错。如果只使用一个数据源(使用远程访问的虚拟域名和端口)是可以正常使用的,当然速度是很慢的。现在我想求教下怎么解决这个问题?让总部直接在局域网访问,然后让分公司用远程访问?

 回到顶部
帅哥哟,离线,有人找我吗?
hitzfeld
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:528 积分:5184 威望:0 精华:0 注册:2017/9/1 23:28:00
  发帖心情 Post By:2021/9/21 16:13:00 [显示全部帖子]

蓝老师好,我按照教程做了下面的修改:
1、系统原本有个局域网连接的数据源,名字叫gcerp。
2、首先添加一个远程的数据源,测试成功。
比如数据源名称叫“yuancheng”,连接字符串如下:Provider=SQLOLEDB.1;Password=123456;Persist Security Info=True;User ID=sa;Initial Catalog=GC_ERP;Data Source=1234567.uttcare.com,9999

3、在BeforeConnectOuterDataSource事件中添加下面的代码:
If e.Name = "gcerp" Then
    If Network.Ping("192.168.1.201",1000) = False  Then '如果第一个IP无法接通
        e.Connec tion String = e.Connec tion String.Replace("192.168.1.201""
1234567.uttcare.com") '注:1234567.uttcare.com是虚拟域名的地址,已经做了端口映射。
    End If
End
 If

3、问题:无论怎么改,只要代码第一句是“If e.Name = "gcerp" Then” 那么系统启动的时候就非要连接第一个数据源不可,绝对不会切换到第二个数据源,系统会报错“连接GCERP错误,请联系管理员”然后直接退出。如果代码改为
If Network.Ping("192.168.1.201",1000) = False  Then '如果第一个IP无法接通
        e.Connec tion String = e.Connec tion String.Replace("192.168.1.201""
1234567.uttcare.com")
    End If
则出现“PING错误”详细信息为“不知道这样的主机”,然后尝试改为虚拟域名对应的IP地址,比如123.22.33.45
If Network.Ping("192.168.1.201",1000) = False  Then '如果第一个IP无法接通
        e.Connec tion String = e.Connec tion String.Replace("192.168.1.201""
123.22.33.45")
    End If
结果仍然相同“PING错误”详细信息为“不知道这样的主机”

4、最后没办法了,我直接修改第一个数据源的信息,把“yuancheng”数据源的信息强行复制粘贴到第一个数据源“gcerp”,并把BeforeConnectOuterDataSource事件中代码删除。连接远程数据库成功。

但是这样一来,我每更新一次都要发布两个不同连接的版本,另外,办公室的人经常要移动办公,切换数据源,非常麻烦。还是想请老师指点下BeforeConnectOuterDataSource事件的代码要怎么写?

另外说明下,教程中说的“注意此事件必须通过e.User来引用用户。”不知道有没有关系?我没有使用系统自带的用户管理功能,全部是自己写的用户管理代码。

 回到顶部