有點用處開發(fā)經(jīng)驗 祭奠我的C#開發(fā)歷程
C#篇:
1、目標(biāo)平臺的選擇:64位操作系統(tǒng)在編譯VS里的程序時,根據(jù)需要設(shè)置項目屬性的“目標(biāo)平臺”為x86。如果設(shè)置為AnyCPU,則在VS 2005里面是不能“編輯并繼續(xù)”的。
——在選擇x86和AnyCPU都可以在32位操作系統(tǒng)上使用。
——選擇x86在64位服務(wù)器上運行,可能會造成類庫無法加載的問題。此問題在后文IIS經(jīng)驗中解釋。
2、取DataTable或者DataGridView里面值的兩種常用方法:
- dt.Rows[i].Cells["ID"].Value.ToString();
- dt.Rows[0]["Name"].ToString();
前者需要從Value中取值,使用起來不是太方便。后者且不能加Value。
——所有的中括號中都可以使用序號(從0開始)或是字段名(列名、行名)
3、如果沒有使用Linq(一直都用的2.0框架……),可以使用此法來寫執(zhí)行SQL。如:
- string strSQL = string.Format("Insert table_1 values('{0}', '{1}',{2},{3})"
如果是varchar類型,必須使用'';如果是int,目前發(fā)現(xiàn)既可使用''也可以不使用,往往寫腳本,嫌麻煩,就都帶上了'',貌似執(zhí)行上不會有問題,但不知道性能會不會有所下降。如果有知道的朋友請在評論區(qū)說下咯。
——有朋友評論說這個容易被注入式攻擊。查了下避免注入式攻擊的方法:1、使用存儲過程;2、參數(shù)化SQL語句。
——以下是使用參數(shù)化SQL語句的方式:
- SqlCommand command = new SqlCommand("select * from UserInfo where sex=@sex and age>@age", connection);
- SqlParameter parameter = new SqlParameter("@age", SqlDbType.Int);//注意UserInfo表里age字段是int類型的
- parameter.Value = 30;
- command.Parameters.Add(parameter);//添加參數(shù)
- SqlDataAdapter adapter = new SqlDataAdapter(command);
4、DLL引用了,但是在代碼里面還是無法調(diào)用。
嘗試在DLL的屬性里面設(shè)置使用特定版本為False。
5、類庫里的方法在調(diào)用的時候,如何讓方法上面顯示自定義說明?
勾選一下項目:屬性——生成——XML文檔文件
——使用類庫的時候,把對應(yīng)的XML也拷貝的相同目錄,這樣會在VS中看到類庫函數(shù)的自定義說明。前提是代碼里面使用“///”生成注釋。
6、博友分享:VS2010在新建.net 4.0項目時,經(jīng)常會默認一個Clent Profile的東東,經(jīng)常出現(xiàn)問題。。。切換為標(biāo)準(zhǔn)框架即可。
VS2005不存在這個問題,VS2013好像也不存在這個問題。
7、未能加載程序集
這個問題的范疇過于龐大,能夠造成這方面問題的原因可能有很多,我記得比較分散,后面找到了陸續(xù)補充。
——版本不匹配。
——類庫生成x86還是x64還是AnyCPU,最好能夠做到目標(biāo)平臺保持一致。
——兩個項目引用路徑不同,或生成個路徑不同。
#p#
SQL篇
1、有關(guān)SQL中Join的問題。
當(dāng)left join的那個表(子表),on的字段存在兩條,那么查詢出來的結(jié)果會分為兩條。
——所以對于子表內(nèi)容掌控不準(zhǔn)確,很可能會查詢出不符合需求的結(jié)果。
例子:
(1)兩個表的內(nèi)容是
(2)left join的結(jié)果
2、同一張表可以Left Join兩次
3、Union的時候,如果兩個字段類型不同,必須進行轉(zhuǎn)換,否則會出錯。
如上圖convert。注意使用union all可以顯著提高速度,這樣的話,不會對查詢結(jié)果進行排序。
思想以及設(shè)計理念:
1、邏輯刪除與物理刪除的概念?
物理刪除時真正的刪除了,邏輯刪除還保留數(shù)據(jù)在數(shù)據(jù)庫中的位置,但是修改其刪除標(biāo)志為已刪除狀態(tài)(貌似這個在大學(xué)里面就學(xué)了……)
2、在UI層(用戶操作界面),如果出錯了,或者操作失敗了,應(yīng)該提醒用戶下一步應(yīng)該做什么。
如:當(dāng)用戶進行操作B的時候,需要先開啟選項A。設(shè)當(dāng)前選項A為關(guān)閉狀態(tài),用戶進行操作B,此時應(yīng)提示:“操作失敗,選項A未啟用,請到XXX設(shè)置中開啟選項A”。在某些應(yīng)用中,甚至可以增加直接跳轉(zhuǎn)到設(shè)置的地方,或者直接修改設(shè)置。根據(jù)需要而定。
——提醒用戶改做什么,個人認為是應(yīng)該的,體現(xiàn)友好度。但是不應(yīng)該把代碼中具體的異常暴露出來,具體異常應(yīng)該記錄日志,并使用異常編碼,在文檔中、代碼中管理起來。