C# 企业级开发案例精解

原文链接: http://www.cnblogs.com/qinhaijun/archive/2011/08/26/2154411.html

C#  企业级开发

1. 显示登陆窗体
显示登陆窗体的代码位于主窗体的Load 事件 处理函数 MainForm_Load 中,此事件会在窗体显示前触发,通常用于分配窗体使用的资源等任务..

2.国际化
如果想使Windows 窗体支持国际化,设置窗体的 Localizable 属性为 True 即可,设置Localizable 属性的目的是为该窗体生成一个基于xml 的资源文件.

3.窗体中 控件的访问级别
默认情况下 private, 设置为 internal, 表明整个程序集文件都是可见的

4.记住密码
将密码保存到注册表,写入注册表,读取注册表

5.将错误记录保存到Windows 系统日志中
EventLog.WriteEntry

6.需要等待的时候,将改变鼠标的状态
base.Cursor = Cursors.WaitCursor;

7.到处到 Excel
导出内容到 Excel 是通过使用 COM 组件实现的. Excel 系统中主文件 Excel.exe 本身就是 COM 组件,通过在.NET 项目引用Excel.exe 文件可以实现对 Excel的功能控制

与 COM 组件相互操作是通过使用 "包装类(Wrapper Class)" 和 类似 "代理"(Proxy) 的机制实现的.
包装类使.NET 程序可以识别 COM 组件提供的接口,而代理类侧提供对 COM 接口的访问.

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;
using Microsoft.Office.Interop.Excel;

namespace CSharpPrj
{
    class ExcelExport
    {
        private object _optionValue = System.Reflection.Missing.Value;

        //如果 Excel 安装在计算机上,侧导出表格内容到Excel
        public void ExportTesks(DataSet ds,DataView dv,DataGridView dgv)
        {
          

            //定义 Application 对象,此对象表示整个 Excel 程序
            Microsoft.Office.Interop.Excel.Application excelApp;

            //定义 Workbook 对象,此对象代表工作薄
            Microsoft.Office.Interop.Excel.Workbook wb;

            //定义Worksheet 对象,此对象表示 Excel 中的一张工作表
            Microsoft.Office.Interop.Excel.Worksheet ws;

            //定义Range 对象,此对象 代表单元格区域
            Microsoft.Office.Interop.Excel.Range r;

            int row = 1;
            int cell = 1;
            int priorityHeight, priorityNoraml, priorityLow;

            try
            {
                //初始化 Application 对象 excelApp
                excelApp = new Microsoft.Office.Interop.Excel.Application();
                //在工作薄的一个工作表上创建任务列表
                wb=excelApp.Workbooks.Add(XlWBATemplate.xlWBATWorksheet);

                //引用第一行第一列的

                ws = (Worksheet)wb.Worksheets[1];
            }
                   
            catch (Exception ex)
            {
                throw ex;
            }
            //命名工作表的名称为"Task Managere"
            ws.Name = "Task Management";

            // 设置第一行第一列的值单元格的值
            ws.Cells[row, 1] = "Tasks as of" + System.DateTime.Now.ToShortDateString();

            //引用第一行第一列的单元格,并显示转换为Range 类型

            r =(Range)ws.Cells[row, 1];
           
            // 设置单元格的字体加黑
            r.Font.Bold = true;
          
            // 遍历数据表中的所有列 ...........
            //创建行,把数据试图记录输出到对应的Excel 单元格...

         

        }
    }
}

===============

C# 企业级开发

1: 服务器端负责承载数据库和中间层组件,中间层完成数据访问和事务处理等工作,而客户端负责用户界面与用户的交互.

2: WEb服务 包括身份验证Web服务 和 数据Web服务,脱机状态下是从本机脱机文件中读取数据

3: 第三方免费控件

4.异步 Web 服务调用提高了系统的总体性能和可伸缩性.
异步WEB 服务调用允许调用方法的线程在返回线程池时执行其他代码,这样,在线程数量有限的线程池中就可以多执行一个线程,从而系统的总体性能得到提高

5.存储过程
执行速度快
能够减少网络流量
能够在集中的位置修改而不需要重新编译应用程序
防止某些类似SQL 插入攻击

6.将错误记录保存到Windows系统日志中
public class LogError
    {
        private const string c_EventSource = "love";
        private const string c_LogName = "Application";
       
        public static void Write(string errorMessage)
        {
            try
            {
                //判断名称为"love" 的事件源是否存在
                if (!EventLog.SourceExists(c_EventSource))
                {
                    //如果不存在就试图创建
                    EventLog.CreateEventSource(c_EventSource, c_LogName);
                }
                // 已存在,写错误消息到日志
                EventLog msg = new EventLog(c_LogName);
                msg.Source = c_EventSource;
                msg.WriteEntry(errorMessage, EventLogEntryType.Error);
            }
            catch
            { }
        }
    }
7. 获得包括在 Windows 注册表的用户名和密码
RegistryKey regKey = Registry.CurrentUser.OpenSubKey("c_RegisterKey");
                if (regKey != null)
                {
                    // 获取保存在注册表项非空
                    userName = (string)regKey.GetValue("UserName");
                    //一般情况下保存到注册表的密码都要加密
                    password = (string)regKey.GetValue("Password");

                    //关闭打开的注册表项
                    regKey.Close();
                }
8.
RegistryKey regKey = Registry.CurrentUser.CreateSubKey("c_RegistryKey");
                if (checkBox1.Checked)
                {
                    regKey.SetValue("UserName", txtUserName.Text.Trim());
                    regKey.SetValue("PassWord", txtPasswrod.Text.Trim());
                }
                else
                {
                    regKey.DeleteValue("UserName", false);
                    regKey.DeleteValue("Password", false);
                }
                regKey.Close();
                  
9. .NET 中也有专门的类负责加密服务,这些类都在 System.Security 命名控件中.

10. WEb 服务不属于 .NET 框架,它是一个由多方支持的跨平台的分布式技术

11. 身份验证WEB 服务中获取加密票
       String userID=0;// 根据用户名和密码将数据库表中对应 id 值查询出来

       // 创建用户票
        FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(userID, false, 1);
        // 加密用户票
        string encryptedTicket = FormsAuthentication.Encrypt(ticket);

        // 获取加密票的超时时间
        AppSettingsReader configurationAppSettings = new AppSettingsReader();

        int timeout =(int)configurationAppSettings.GetValue("AuthenticationTicket.Timeout", typeof(int));

        //缓存加密票
        Context.Cache.Insert(encryptedTicket, userID, null, DateTime.Now.AddMinutes(timeout), TimeSpan.Zero);

        //如果成功返回 用户加密票
        return encryptedTicket;

12. SqlHelper 类是包含在微软数据应用块(Microsoft Data Application Blocks) 中的一个密封(Sealed)类,使用他可简化访问数据库的编码,并可获得较高的速度. 该函数封装ADO.NET 中的 SQL SERVER 操作类,无需定义参数的相关属性,而且不需要事先打开数据库连接.
ExecuteSaclar 函数在数据库 连接没有打开的情况下,可以自动打开数据库连接

13 SQL 注入攻击的例子 select *from admin where userName='@userName' and password='@passwrod' ;
如果第一个文本框输入 1' or '1'='1 第二个文本框 随便输入.. 都能返回相应的结果.这是一个SQL 注入攻击.为了避免SQL 注入式攻击,可以采用2中方法解决,一种是过滤所有的非法字符和字符串,如单引号,双引号,分号,逗号,冒号,连接号等,字符串有 "net user","net localgroup administrators" 对他们进行转换或者过滤. 但是这种方法有很大的局限性,如果输入值中包括这些字符,也将不能输入.第二种方法就是使用参数,SQL 参数的传递方式将防止攻击者利用单引号和连字符实施攻击.并允许输入前一种方法总的所有的非法字符和字符串

转载于:https://www.cnblogs.com/qinhaijun/archive/2011/08/26/2154411.html

你可能感兴趣的:(C# 企业级开发案例精解)