Winform 长时间连接Sql server 出现崩溃情况。

Duohai 2015-10-01 11:14:26
本人是新入门的菜鸟,最近在做一个软件,遇到2个问题,请教下大家。
第一个问题:该软件登陆后有个timer,每1分钟会提交本地时间到SQL 数据库里。该软件挂机后 偶尔会出现“在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。” 这种错误。不知道该怎么解决?

第二个问题:数据库连接字段如果写在app.config里,软件生成后 数据库连接账号密码会被查看到,有没有好一点的办法能不被查看到。
...全文
199 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjq 2015-10-02
  • 打赏
  • 举报
回复
1:确认一下你的SqlConnection是你定义的全局变量还是每次访问数据库时都new一个,如果是前者,改成每次都new 2:加密,自己写一个字符串的加密/解密算法,把连接串配置加密后存在app.config里,使用的时候解密后再传给sqlconnection
  • 打赏
  • 举报
回复
另外,你写“pooling=false”是要搞什么?特意不让连接能够重复使用?
  • 打赏
  • 举报
回复
换成万兆光纤,而且保证在一个机房里。 其实就算只在一个局域网,而不是通过“多级”远程连网,也不能保证网络永远稳定。只不过这样断线的概率极低而已。
ajianchina 2015-10-02
  • 打赏
  • 举报
回复
连接字符串换成 Server==***;Initial Catalog=***;User ID=***;Password=*** 这种,再测。
devmiao 2015-10-02
  • 打赏
  • 举报
回复
(1)检查连接字符串和服务器是否运行 (2)字符串加密或者用windows集成验证
lili20090907 2015-10-02
  • 打赏
  • 举报
回复
第一,为资源释放问题, 建议你每次使用后立即关闭 第二,在config里 把数据库链接字符串进行加密,随意何种加密,只有是能解密的就行,或者加我,我给你一个
tcmakebest 2015-10-02
  • 打赏
  • 举报
回复
作为客户端,应该能够处理服务器连接失败的情况,此时显示一个警告消息是最好的. 第二个问题解决起来比较费事了,其实客户端是不建议直接连接数据库的,应该通过数据接口存取数据,并且数据接口要有身份检测功能,这样安全才有保障.
Duohai 2015-10-02
  • 打赏
  • 举报
回复
引用 7 楼 ajianchina 的回复:
连接字符串贴出来看看
string connstr = "Server=122.*.*.*;DataBase=hl***;uid=hl***;pwd=123456;pooling=false";
        #region 更新挂机时间
                    if (Anydesk.IsAnyDeskOpen())
                    {
                        Thread.Sleep(60000); //1分钟记录一次
                        using (SqlConnection conn = new SqlConnection(connstr))
                        {
                            conn.Open();
                            SqlCommand cmd = new SqlCommand("update TB_Guaji set G_date='" + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") + "',GJSC=GJSC+1 where id=" + txtShuaID.Text, conn);
                            cmd.ExecuteNonQuery();
                            txtGJSC.Text = (Convert.ToInt32(txtGJSC.Text) + 1).ToString();
                            TimeSpan ts = new TimeSpan(0, 0, Convert.ToInt32(Convert.ToInt32(txtGJSC.Text) + 1) * 60);
                            tssl_GjZt.Text = "已挂" + (int)ts.TotalHours + "小时" + (int)ts.Minutes + "分钟";
                        }
                    }
                    else
                    {
                        tssl_GjZt.Text = "挂机进程意外终止!";
                        this.Text = "挂机端(意外终止)";
                    }
        #endregion
ajianchina 2015-10-02
  • 打赏
  • 举报
回复
连接字符串贴出来看看
Duohai 2015-10-02
  • 打赏
  • 举报
回复
引用 3 楼 ajianchina 的回复:
1第一个是资源为释放造成的。 2关于密码,只要你不是用的sql2000,不将连接字符串放配置文件也就行了,真要安全性,该用webapi或webservice或wcf来提供数据服务。
每次我是使用这样连接的,按说每执行一次就释放资源了。 using(SqlConnection conn = new SqlConnection(connstr)) { } 会不会是连接的太频繁,远程服务器自动中断,或者是网络不稳,更新失败?
Duohai 2015-10-02
  • 打赏
  • 举报
回复
引用 2 楼 wjq 的回复:
1:确认一下你的SqlConnection是你定义的全局变量还是每次访问数据库时都new一个,如果是前者,改成每次都new 2:加密,自己写一个字符串的加密/解密算法,把连接串配置加密后存在app.config里,使用的时候解密后再传给sqlconnection
每次我是使用这样连接的,按时没执行一次就释放资源了。 using(SqlConnection conn = new SqlConnection(connstr)) { }
宝_爸 2015-10-02
  • 打赏
  • 举报
回复
第一个问题,资源没释放不是应该报什么连接池不够用的错误吗? 我觉得看错误像是网络不稳定。
ajianchina 2015-10-02
  • 打赏
  • 举报
回复
1第一个是资源为释放造成的。 2关于密码,只要你不是用的sql2000,不将连接字符串放配置文件也就行了,真要安全性,该用webapi或webservice或wcf来提供数据服务。
老秋先生 2015-10-02
  • 打赏
  • 举报
回复
第一个问题:   可能你和我很久以前一样认为连接开开关关很浪费资源,后来我发现原来.NET的连接本身就是自带了连接池,也就是说,你Close的时候并非真正的关闭了,有可能在你频繁使用下,并没有执行关闭。所以连一次就关一次就可以了~~~ 第二个问题:   这个在winfrom里面确实是个很头疼的做法,但并非难解决,使用MD5加密,将加密数据放在一个文件里,密钥写成变量就可以了,然后再把exe混淆防止反编译,这么个做法虽然并不是最完美,但确实最简单,也为有恶意的人设置了一道门槛,仅此而已~~~

111,124

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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