今天把一隻ASP.NET程式部屬到Win7的IIS後,一跑出現下面的錯誤訊息
警告: 組件繫結記錄切換為 OFF。
若要記錄組件繫結失敗,請將登錄值 [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) 設為 1。
注意: 與組件繫結失敗記錄相關的效能會有部分負面影響。
若要關閉此功能,請移除登錄值 [HKLM\Software\Microsoft\Fusion!EnableLog]。
有看沒有懂的訊息,最後請出Google大神
ASP.NET 應用程式執行於 Windows x64 環境
如下圖,將IIS的集區,設定為啟用32位元應用程式,即可正常執行...
2012年12月5日 星期三
2012年12月4日 星期二
關於C#程式路徑的問題
這幾天又遇到這個問題啦!
總之最好存取任何檔案時,都是使用完整路徑比較保險!
有空再來整理一下~~
http://www.cnblogs.com/zhfen/archive/2010/05/17/1737406.html
總之最好存取任何檔案時,都是使用完整路徑比較保險!
有空再來整理一下~~
http://www.cnblogs.com/zhfen/archive/2010/05/17/1737406.html
2012年11月30日 星期五
PMP考試甘苦談~
2012/11/20 小弟終於辛苦的考過PMP認證了。
說來拿到這張PMP的過程,真的是花了我很多時間和苦心。
我在公司原本是很單純的寫程式,但在去年一些同事離職後,
小弟也被指派上火線掛PM帶專案,工作除了原來的系統分析、設計,和寫系統,也要擠出時間做需求訪談、報告、寫文件和溝通。
剛開始的時候,每天都加班,而且還要惡補專案中同仁的業務、系統流程。 去開會被USER質問(就是被釘的意思)也不是沒有,但是回來後,苦水只能往裡面吞,盡量避免負面的情緒影響團隊。
但是這也給了我一個好機會去嘗試管理面的工作,也在今年七月趁這個機會報名恆逸的PMP課程。
課堂上認識了張憲中老師,和很多其他公司的PM。
第一堂課,張老師讓每個人分享自己的苦水,哇,大家講起苦水真是欲罷不能~~
至於張老師的PMP課程,學生真是受益良多。 老師用很多本身的實務經驗配合幽默的簡報技巧,並適時的讓學員互動,把原本看似很無聊的專案管理課程,變成一門很有趣的管理課程。
(我也偷偷的向老師學了幾招簡報技巧 J)
恆逸也提供了很多考古題,讓學員可以作答。 所以八月結束總複習後,小弟馬上就上去PMI報名準備考試了,沒想到…
竟然被抽中被稽核!!
傻眼,只好先弄一些審查的文件,考試只能往後延了。 結果九月的時候,剛好又碰上公司正忙 … 只好再延。 到了十一月,同時去上課的同學都已經順利通過了,小弟聽聞後,不知哪來的傻勁,馬上報名三天後的考試! (現在想想,我真的很衝!!)
結果那三天,回家後就讀書到半夜,每天睡不到五個小時,超累!!
11/20 那天根本半睡半醒著去考場,考前真的超級緊張,開始作答後,前面五十題就花了我一個小時,幾乎每題都看得很仔細,但是其實很多都很像考古題,所以慢慢的就比較輕鬆作答了…
但是有一些題目(尤其是計算題,ex 要徑問題),就有一些變化了。
另外有一些流程的工具 …如柏拉圖,中文翻譯可能跟我們看的中文書不一樣,這時候就要回去看英文題目。 另外我也發現有一題的選項,中文翻譯不正確,遇到這種情形,還是都要往下看一下英文題目和選項才能確定答案。
最後四個小時到數完畢後,系統就會問你要不要做問卷(我當然想知道有沒有通過,所以跳過)。
接著命運的Loading齒輪就開始在畫面上旋轉 … 大概有三十秒吧!!
就跑出”PASS” 的字樣!
終於放下了心中的一顆大石!!
整體來說,小弟覺得只要把上課的教材和考古題看熟做熟,通過應該是沒有問題的!!
如果您正在準備考試的話,加油! 您一定可以低!
2012年11月26日 星期一
[C#] 快速了解泛型委派
▌Action & Func
Action<T, T…> 沒有回傳值的泛型委派
Func<T,T…> 可以回傳值的泛型委派
對小弟來說,泛型委派和Delegate最大的差別就是,不用先宣告一個Delegate定義名稱。
使用上較方便。
直接看範例…
▌Sample
先定義一個CName物件,裡面會放要委派的方法。
public class
CName :IDisposable
{
private
String sName;
public
CName(string name)
{ this.sName
= name; }
/// <summary>
/// 沒有參數,沒有回傳值
/// </summary>
public
void DisplayToConsole() { //… }
/// <summary>
/// 一個參數,回傳String型別
/// </summary>
public
String DisplayToWindow(String sDesc) {
//… }
/// <summary>
/// 兩個參數,回傳String型別
/// </summary>
public
String DisplayToWindow(String sDesc01, String
sDesc02) { //… }
/// <summary>
/// 泛型:兩個個參數,無回傳值
/// </summary>
public
void Combine<T>(T itemA, T itemB) { //…
}
/// <summary>
/// 泛型:兩個個參數,回傳String型別
/// </summary>
public
String Combine_WithRtnVal<T>(T
itemA, T itemB) { //… }
}
|
▋Delegate
public delegate
void ShowName();
/* 測試Delegate */
using (CName
cName = new CName("Delegate測試"))
{
ShowName
_showName = cName.DisplayToConsole;
_showName();
}
|
▋Action 匿名委派
/* 測試Action匿名委派 */
using (CName
cName = new CName("Action匿名委派"))
{
Action
_showNameActDel = cName.DisplayToConsole;
_showNameActDel();
}
|
▋Generic Action 泛型匿名委派
/* 測試Action泛型匿名委派 */
using (CName
cName = new CName("Generic Action"))
{
Action<String, String>
_showNameActGen = (x, y) => cName.Combine(x, y);
//Action<String>
_showNameActGen = cName.Combine<String>;
_showNameActGen("1", "2");
}
|
PS. Action<String, String>
指的是委派的方法裡面須帶兩個String參數。
▋Generic Func
/* 測試Func泛型匿名委派 */
using (CName
cName = new CName("Generic Func"))
{
Func<int, int, String> _showNameFuncGen = (x, y) =>
cName.Combine_WithRtnVal(x, y);
String
sRslt = _showNameFuncGen(1, 2);
}
|
PS. Func<int, int, String> 指的是委派的方法裡面須帶兩個int參數,回傳String。
如果意猶未盡,可以參考MSDN的詳細說明 !
2012年11月8日 星期四
[C#] Epplus (Excel元件)
Epplus (Excel元件)
3.
直接列出匯出成Excel的程式碼…
//若存在該檔案則先刪除
if
(File.Exists(sFilePath))
{
File.Delete(sFilePath);
}
//開檔
FileStream
fs = new FileStream(sFilePath,
FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
//載入Excel檔案
ExcelPackage
ep = new ExcelPackage(fs);
if
(ep.Workbook.Worksheets[sNewSheetName] == null)
//不存在該Sheet
{
//加入一個WorkSheet
var
ws = ep.Workbook.Worksheets.Add(sNewSheetName);
ws.View.ShowGridLines = true; //是否顯示格線
}
//取得WorkSheet
ExcelWorksheet
sheet = ep.Workbook.Worksheets[sNewSheetName ];
//設定起始列為3
int
startRowNumber = 3;
int
DataRowNumber = startRowNumber+1;
//寫入標題文字
for (int
i = 0; i < dataGridView.Columns.Count; i++)
{
//設值為欄位名稱
sheet.Cells[startRowNumber,
i + 1].Value = dataGridView.Columns[i].Name;
//設定樣式
sheet.Cells[startRowNumber, i +
1].AutoFitColumns(); //自動欄寬
//sheet.Column(i
+ 1).Width = 100;
sheet.Cells[startRowNumber,
i + 1].Style.HorizontalAlignment = OfficeOpenXml.Style.ExcelHorizontalAlignment.Center;
//欄位置中
sheet.Cells[startRowNumber,
i + 1].Style.Border.BorderAround(OfficeOpenXml.Style.ExcelBorderStyle.Thin);
//儲存格框線
}
//寫入資料
int
ColCnt = dataGridView.Columns.Count; //欄位數
int RowCnt =
dataGridView.Rows.Count; //資料數
for
(int i = 0; i < RowCnt; i++)
{
for
(int j = 0; j < ColCnt; j++)
{
//讀值
string cellValue = "";
if (dataGridView.Rows[i].Cells[j].Value != null)
{
cellValue =
dataGridView.Rows[i].Cells[j].Value.ToString();
}
else
{
cellValue = "";
}
//寫值
sheet.Cells[DataRowNumber, j + 1].Value = cellValue;
//樣式設定
//sheet.Cells[DataRowNumber,
j + 1].AutoFitColumns(); //自動欄寬
sheet.Cells[DataRowNumber, j + 1].Style.HorizontalAlignment =
OfficeOpenXml.Style.ExcelHorizontalAlignment.Center;
//欄位置中
sheet.Cells[DataRowNumber,
j + 1].Style.Border.BorderAround(OfficeOpenXml.Style.ExcelBorderStyle.Thin);
//儲存格框線
}
DataRowNumber++;
}
//存檔
ep.SaveAs(fs);
fs.Close();
//關閉資源
ep.Dispose();
ep = null;
MessageBox.Show("儲存成功! ");