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 参数的传递方式将防止攻击者利用单引号和连字符实施攻击.并允许输入前一种方法总的所有的非法字符和字符串