Foxtable(狐表)用户栏目专家坐堂 → 当项目链接不上数据库服务器的时候 弹出Sql server 不存在或拒绝访问 然后项目一直卡起来了


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

主题:当项目链接不上数据库服务器的时候 弹出Sql server 不存在或拒绝访问 然后项目一直卡起来了

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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
当项目链接不上数据库服务器的时候 弹出Sql server 不存在或拒绝访问 然后项目一直卡起来了  发帖心情 Post By:2022/5/12 20:33:00 [只看该作者]

Sql server 不存在或拒绝访问

 

当项目链接不上数据库服务器的时候  弹出Sql server 不存在或拒绝访问  然后项目一直卡起来了

 

有没有代码可以直接判断,如果当出现这个错误的时候,直接提示数据库链接失败,然后直接退出当前项目。


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


加好友 发短信
等级:超级版主 帖子:105877 积分:538442 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/5/12 20:58:00 [只看该作者]

BeforeShowErrorMessage 事件(项目属性那里)

 

写代码

 

If e.message1.Contains("一般性网络错误") orelse e.message1.Contains("Sql server 不存在或拒绝访问") Then

    e.Cancel = True

Syscmd.Project.Exit()

End If


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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)BeforeShowErrorMessage 事件(...  发帖心情 Post By:2022/5/13 11:13:00 [只看该作者]

还是会弹出错误,然后卡死,以下是相关全部代码,麻烦老师看看  那些事件代码是重复的,可以去掉的!

其中红色部分的提示内容,会多次弹出,当指定的ip无法ping通的时候,但是实际上ip在cmd下又是可以ping通的

 

 

 

daiBeforeConnectOuterDataSource代码如下:

Dim File As String = e.ProjectPath & "\Attachments\Connect.Ini"
e.ConnectionString = FileSys.ReadAllText(File)

Dim ErrMsg As String
Dim Conn As String = FileSys.ReadAllText(File)
If Connections.TryConnect(Conn,ErrMsg) = False Then
    vars("数据源状态")=False
    MessageBox.Show("数据源无法连通,原因:" & ErrMsg)
    Syscmd.Project.Exit()
Else
   
    If Connections.Contains("无纸化会议")=True  Then
    Else
        Connections.Add("无纸化会议",Conn)
    End If
    vars("数据源状态")=True
    Dim tb As DataRow =DataTables("系统设置").Find("设置名='软件升级地址'")
    If tb IsNot Nothing Then
        UpdatePath = tb("设置内容")
    End If
    Dim tb1 As DataRow =DataTables("系统设置").Find("设置名='是否互联网升级'")
    If tb1 IsNot Nothing Then
        RemoteUpdate=tb1("设置内容")
    End If
End If

 

BeforeOpenProject代码如下:

Dim ipFile As String = ProjectPath & "\Attachments\ip.txt"
If Filesys.FileExists(ipFile) Then
    Dim ip As String = FileSys.ReadAllText(ipFile)
    If Network.Ping(ip) Then
    Else
        e.Cancel = True
        e.HideSplashForm = True
        Messagebox.Show("该数据库服务器不可用,无法打开此项目!请联系系统管理员处理!","温馨提示")
        Syscmd.Project.Exit()
    End If
End If

 

BeforeShowErrorMessage代码如下:

If e.message1.Contains("一般性网络错误") OrElse e.message1.Contains("Sql server 不存在或拒绝访问") Then
    e.Cancel = True
    MessageBox.Show("数据库服务器链接失败,系统即将退出!")
    Syscmd.Project.Exit()
End If

 

服务器链接判断  任务计划代码:

Dim ipFile As String = ProjectPath & "\Attachments\ip.txt"
If Filesys.FileExists(ipFile) Then
    Dim ip As String = FileSys.ReadAllText(ipFile)
    If Network.Ping(ip) Then
        vars("数据源状态")=True
    Else
        Messagebox.Show("与服务器链接断开,请勿进行任何操作!请联系系统管理员处理!","温馨提示")
        vars("数据源状态")=False
        Syscmd.Project.Exit()
    End If
End If


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


加好友 发短信
等级:超级版主 帖子:105877 积分:538442 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/5/13 11:34:00 [只看该作者]

红色是自己写代码弹窗的,肯定会多次弹出啊!一个在计划里,不停执行;一个在BeforeShowErrorMessage,只要连接数据库出错就会弹出。

不想多次弹出可以这样

BeforeShowErrorMessage代码如下:

if vars("已弹出") = false

If e.message1.Contains("一般性网络错误") OrElse e.message1.Contains("Sql server 不存在或拒绝访问") Then
    e.Cancel = True

vars("已弹出") = true
    MessageBox.Show("数据库服务器链接失败,系统即将退出!")
    Syscmd.Project.Exit()
End If

end if


至于【当指定的ip无法ping通的时候,但是实际上ip在cmd下又是可以ping通的】,在网络不稳定的时候会有这种情况的,这几秒钟连不上,下几秒钟可能就连上了。来自己写日志记录一下,当时ping不通的是哪一个IP。也可以考虑网上下载些网络监控软件,看看网络的连接情况


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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)红色是自己写代码弹窗的,肯定会多次...  发帖心情 Post By:2022/5/13 18:14:00 [只看该作者]

根据老师的提示更改了对应的部分  现在代码如下:

网络ip ping有时候是会掉那么几秒,有没有办法增加一个延时ping呢?比如60秒延时

 

 

另外我主要是想实现的是

项目启动时,项目与数据库无法正常通讯的时候,弹出提示,然后退出项目!

运行过程中项目与数据库无法正常通讯的时候,弹出提示,联系管理员,然后可以正常通讯的时候,项目继续运行!

 

下述对应的事件代码  是否可以精简,或者那些部分不需要呢?不然系统项目总是在链接ip  对服务器有点负荷……

 

 

daiBeforeConnectOuterDataSource代码如下:

Dim File As String = e.ProjectPath & "\Attachments\Connect.Ini"
e.ConnectionString = FileSys.ReadAllText(File)

Dim ErrMsg As String
Dim Conn As String = FileSys.ReadAllText(File)
If Connections.TryConnect(Conn,ErrMsg) = False Then
    vars("数据源状态")=False
    MessageBox.Show("数据源无法连通,原因:" & ErrMsg)
    Syscmd.Project.Exit()
Else
   
    If Connections.Contains("无纸化会议")=True  Then
    Else
        Connections.Add("无纸化会议",Conn)
    End If
    vars("数据源状态")=True
    Dim tb As DataRow =DataTables("系统设置").Find("设置名='软件升级地址'")
    If tb IsNot Nothing Then
        UpdatePath = tb("设置内容")
    End If
    Dim tb1 As DataRow =DataTables("系统设置").Find("设置名='是否互联网升级'")
    If tb1 IsNot Nothing Then
        RemoteUpdate=tb1("设置内容")
    End If
End If

 

BeforeOpenProject代码如下:

Dim ipFile As String = ProjectPath & "\Attachments\ip.txt"
If Filesys.FileExists(ipFile) Then
    Dim ip As String = FileSys.ReadAllText(ipFile)
    If Network.Ping(ip) Then
    Else
        e.Cancel = True
        e.HideSplashForm = True
        Messagebox.Show("该数据库服务器不可用,无法打开此项目!请联系系统管理员处理!","温馨提示")
        Syscmd.Project.Exit()
    End If
End If

 

BeforeShowErrorMessage代码如下:

if vars("已弹出") = false

If e.message1.Contains("一般性网络错误") OrElse e.message1.Contains("Sql server 不存在或拒绝访问") Then
    e.Cancel = True

vars("已弹出") = true
    MessageBox.Show("数据库服务器链接失败,系统即将退出!")
    Syscmd.Project.Exit()
End If

end if

 

服务器链接判断  任务计划代码:

Dim ipFile As String = ProjectPath & "\Attachments\ip.txt"
If Filesys.FileExists(ipFile) Then
    Dim ip As String = FileSys.ReadAllText(ipFile)
    If Network.Ping(ip) Then
        vars("数据源状态")=True
    Else
        Messagebox.Show("与服务器链接断开,请勿进行任何操作!请联系系统管理员处理!","温馨提示")
        vars("数据源状态")=False
        Syscmd.Project.Exit()
    End If
End If

 

 

 

[此贴子已经被作者于2022/5/13 18:14:01编辑过]

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


加好友 发短信
等级:超级版主 帖子:105877 积分:538442 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/5/14 8:45:00 [只看该作者]

BeforeConnectOuterDataSource代码没有任何用处,去掉。把Connections.TryConnect判断并退出代码放到BeforeOpenProject;添加数据源和设置设计路径,应该放到AfterOpenProject,

计划管理去掉

 回到顶部