经验:
- 控件 From : frm名称 frmLogin
- 如何在按钮中添加快捷键 登录(D) 这个是这么做的呢? 其实很简单 就是把按钮的 Text属性 改成 登录 (&D)
- 如果忘记了Sql数据库的connectionStrings ,
- 可以创建一个 文本文件, 后缀改为 udl
- 开始设置具体连接方法,
- 用在记事本中打开 , 就可以看到连接数据库的 connectionStrings
- SqlDataReader 的对象记得要Close() , 不然就会占用这个资源 , 虽然出了 using 的 { } 的时候会释放,但是 释放和关闭时不一样的.
- 释放的意思是封闭了这个桥, 虽然封闭了, 但是在内存中还是占有内存的, 一段时间后才会关闭掉
- 关闭的意思是炸掉了这个桥,
- 字段和属性的区别?
-
属性是类提供给外部调用时用,的可以使用 对象.属性 设置或读取 一个值 get{reture xxx;}表示可读 set{xxx = value;}表示可写 字段就是类内部用的.存储数据
-
- 数据库的安全
- SQL注入攻击: 就是通过对一些的探测SQL中的数据的 SQL语句来进行分析 , 如果C#中 和数据库连接的安全逻辑不够,那个就可以不用用户密码就可以登入...
- eg: select count(*) from 表 where name = ' {0} ' and psw = '{1 }' 很多人多用这个来判断用户名和密码是否一致, 所以我们要找一个 {0} 和 {1} 的字符串使得 count(*) = 1 ,这样就可以不用知道账号密码登录. 这里有一个{0}就可以 了, {0} =" ' or 1=1 -- " 这个就可以了,那个{1} 还都可以不用考虑, 虽然这里返回的不是 = 1 , 但是是 >0
- 因此,我们要注意以下几点
- 对客户输入进行判断
- count == 1 (王道) 就是我们验证是否有这个账号密码用这个 而不是 count > 0
- 用存储过程开发
- CTRL + J 可以弹出 那个代码补全的部分(很好用) .....
- 判断字符串为空的方法? str.length == 0
-
窗体之间的跳转?在frmLogin这个面板的 登录按钮 的那个登录成功的地方加上这几句this.DialogResult = DialogResult.Yes ;