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 中也有專門的類負責Data Encryption Service,這些類都在 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 參數的傳遞方式將防止攻擊者利用單引號和連字號實施攻擊.並允許輸入前一種方法總的所有的非法字元和字串