.Net培训个人总结笔记13

学习交流,欢迎转载。转载请注明文章来源:http://www.cnblogs.com/lgjspace/archive/2011/10/12/2214008.html

细节:
若要在强类型 DataSet 中添加含有“Where Name Like '%@Name%'”等这种带“模糊匹配”通配符的参数是不能直接这样添加的,这里传进 DataSet 中的 SqlCommand 还是按一般的传入参数的方法,即应该还是像往常一样写成“Where Name Like @Name”,然后在写 C# 代码调用该强类型 DataSet 对应的 Adapter 来执行查询之前,先把待传入查询方法的参数加以处理(例如把参数设置成:“"%" + "abc" + "%"”),然后再传入,这样就可以实现“模糊匹配”的效果了。

 

经验:
在强类型 DataSet 中调用各种和数据库交互的方法时,DataSet 自身已经有了防止注入漏洞攻击的功能,对所传入的参数都进行过滤,本人尝试过在调用自己在强类型 DataSet 中设置的 SelectUsersByName() 方法(里面的SqlCommand语句是“SELECT * FROM T_Files where Name like @Name”)时传入“"%" + word + "% and Name Like %" + word + "%"”(注:该参数不包含最外层的全角双引号)之类的参数值,结果没有达到预想效果,后来删除了参数里的 “and”、“or”等(即不进行如“a and b”、“a or c”等复合条件的查询,以去掉所有参数中的 Sql 关键字)之后,一切正常。

 

细节:
Call Center(呼叫中心)也是一种 CRM(客户关系管理)系统,只是 CC 在具备 CRM 功能的基础上增加上 CTI(计算机与电信集成技术)而已。

 

区别:
窗体类 Form 的 Show() 方法弹出的是非模态窗口,非模态窗口打开后不会挡着父级窗口,也没有阻塞效果,而 ShowDialog() 方法弹出的则是模态窗口,模态窗口打开后会挡着父级窗口,在该窗口被关闭之前禁止用户对父级窗口的任何操作,具备阻塞效果。

 

细节:
设定对话框窗体里的按钮的 DialogResult 属性,就可以关闭窗口(只有 ShowDialog 出来的界面才会有这效果)。

 

经验:
要实现“窗口间传递信息或数据”的效果的一种可行方法是:可以让窗体控件对外暴露所需要的属性(即把属性的访问级别设为 public。),然后在外界即可通过该窗体的公共属性来获取信息或数据。

 

细节:
MDI(多文档窗格)风格已不是现在普遍流行的风格了,现在流行的是标签风格。
实现 MDI 风格所需的操作:
1. 把父窗口的 IsMdiContainer 属性设为 true;
2. 在创建了子窗体对象的代码之后和子窗体对象 Show() 的代码之前要设定该子窗体对象的 MidParent 属性,例如:form2.MdiParent = this;

 

概念理解:
用户控件的作用就相当于代码中的函数,最大限度地减少特定组合的控件群的重复编排。用户控件相当于一个更大的控件,一个能够把一个或多个默认控件拼凑起来并能自定义相关内部逻辑的较大的控件。

 

细节:
在项目中创建数据库时,如果在“数据源配置向导”页面中不是点击“取消”,而是点击“完成”则 VisualStudio 会自动地帮我们创建好一个空的强类型 DataSet。

 

细节:
如何才可以为自定义的用户控件里面使用的普通官方控件绑定数据:
在所允许被外界绑定数据的属性声明代码前标记为“[Bindable(true)]”,这样,该属性所指代的控件值即可被外界绑定。

 

细节:
在 VisualStudio 环境下创建的窗体项目中,项目运行的主窗口一定是在 Program 文件下的代码“Application.Run(new Form1())”中所指定的窗口对象,例如:在该代码中所指定的项目的主窗体就是窗体类 Form1 的对象。

 

技巧:
实现“先打开登录窗口进行登录,登录成功才打开主窗口,否则不打开主窗口,直接退出”的效果最推荐的方法:
如下面代码所示,主要是留意 Main 方法中的代码:

 1 namespace LoginDemo
2 {
3 static class Program
4 {
5 /// <summary>
6 /// 应用程序的主入口点。
7 /// </summary>
8 [STAThread]
9 static void Main()
10 {
11 Application.EnableVisualStyles();
12 Application.SetCompatibleTextRenderingDefault(false);
13
14 FormLogin formLogin = new FormLogin(); //FormLogin 是登录窗口的类。
15 if (formLogin.ShowDialog() == DialogResult.OK) //判断登录是否成功,是则打开主窗口,否则直接退出而不
16
17 启动主窗口。
18 {
19 Application.Run(new FormMain());//Application.Run() 方法启动的是主窗口。
20 }
21 }
22 }
23 }

 

细节:
一旦为一个窗体的 DialogResult 属性赋值,窗口就立刻关闭,并返回该设定的值。

 

细节:
待完善的登录窗口的细节点:
专业化的登陆界面:
1. 启动时窗口位于屏幕中央(StartPosition = CenterScreen;)
2. 设定 AcceptButton,当点击回车键要响应的按钮,这样就不需要手动使用鼠标点击按钮才能触发。
3. 设定 CancelButton,当点击 ESC 键时要响应的按钮。
4. 设定按钮的 DialogResult,当点击按钮的时候窗口关闭,并且执行操作。
5. 设定窗口的 DialogResult 即可关闭窗口并且让 ShowDialog 方法返回设置的值。
6. 如果图片是以资源的形式嵌套在程序中的 resx 下,则就算源文件被删掉也不会影响到使用该图片的项目。
7. 对话框的风格,不能随意的拖放大小、最大化、最小化:

1 FormBorderStyle = FixedDialog;  //把对话框的风格设为不允许拖动缩放操作风格。
2 MinimizeBox = False;      //禁止最小化按钮。
3 MaximizeBox = False;      //禁止最大化按钮。

 

细节:
窗体控件的 StartPosition 属性的属性值 CenterParent 表示把窗体初次显示位置设定在父级窗体的中央,而 CenterScreen 则表示把窗体初次显示位置设定在屏幕的中央。

 

细节:
1. 用 MD5 算法可以实现“把密码加密”的效果,但并不表示 MD5 就是一种加密算法,MD5 算法是单向的,并不能通过 MD5 码反向推断出原密码,而加密算法都是能解密的算法,因此 MD5 不是一种加密算法。
2. MD5 算法是一种散列算法,也叫哈希(Hash)算法。散列算法还包含有 SHA1,CRC32,TIGER 等。

 

细节:
1. 两个不同的文件算出的 MD5 值并不一定能保证不相同(既碰撞),但概率非常非常非常的低,可以近似地看作为零。
2. 破解 MD5 的唯一方法就是产生碰撞,虽然不能保证不会出现碰撞,但非常非常非常难。

 

细节:
控件的使用细节:
1. DataGridView 控件的“编辑列”对话框中的 HeaderText 属性可以设置 DataGridView 中各个列的显示出来的列名。
2. 若要禁止用户在 DataGridView 中修改数据,可以禁止 DataGridView 的修改功能:右键点击 DataGridView,在弹出的对话框中取消所要取消的项即可,一般多为取消该几项:“启用添加”、“启用编辑”、“启用删除”。
3. ToolStrip 控件的 DisplayStyle 属性可以设置 ToolStrip 上的按钮的显示风格(None、Text、Image、ImageAndText)。

 

技巧:
降低用户输入的简单密码会被碰撞的概率的方法:
1. 通过对所有用户输入的密码内容中加入公司内部才知道的固定的字符串,把两者拼凑起来组成新的字符串后,再计算出新字符串的 MD5 码,然后才进行存储,这样安全性会大大提高。
2. 通过多次地对密码内容进行 MD5 加密,例如:GetMD5(GetMD5(GetMD5(密码)))。

posted @ 2011-10-12 23:35  梁国锦  阅读(236)  评论(0编辑  收藏  举报