前言:程序員
下個月就要去進行Java開發了,之後C#碰的就少了(惋惜去年買了三本C#的書,幾乎仍是全新的……),平時一些經驗都記在OneNote裏面,如今收集整理出來,由於只能利用交接工做的打醬油的時間,暫時沒什麼排版,陸續更新中……sql
裏面的經驗基本上都是比較初級的,是在進行開發工做中極可能遇到的問題~不少都是我的總結,蒐集,確定有些不合理甚至錯誤的東西,望不吝指正。數據庫
2015年4月1日17:52:17服務器
基本更新完成,還有部份內容記載具體的項目經驗中,還須要篩選下……框架
64位操做系統在編譯VS裏的程序時,根據須要設置項目屬性的「目標平臺」爲x86。若是設置爲AnyCPU,則在VS 2005裏面是不能「編輯並繼續」的。ide
——在選擇x86和AnyCPU均可以在32位操做系統上使用。函數
——選擇x86在64位服務器上運行,可能會形成類庫沒法加載的問題。此問題在後文IIS經驗中解釋。性能
dt.Rows[i].Cells["ID"].Value.ToString(); dt.Rows[0]["Name"].ToString();
前者須要從Value中取值,使用起來不是太方便。後者且不能加Value。測試
——全部的中括號中均可以使用序號(從0開始)或是字段名(列名、行名)ui
string strSQL = string.Format("Insert table_1 values('{0}', '{1}',{2},{3})"
若是是varchar類型,必須使用'';若是是int,目前發現既可以使用''也能夠不使用,每每寫腳本,嫌麻煩,就都帶上了'',貌似執行上不會有問題,但不知道性能會不會有所降低。若是有知道的朋友請在評論區說下咯。
——有朋友評論說這個容易被注入式攻擊。查了下避免注入式攻擊的方法:一、使用存儲過程;二、參數化SQL語句。
——如下是使用參數化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);//添加參數 SqlDataAdapter adapter = new SqlDataAdapter(command);
嘗試在DLL的屬性裏面設置使用特定版本爲False。
勾選一下項目:屬性——生成——XML文檔文件
——使用類庫的時候,把對應的XML也拷貝的相同目錄,這樣會在VS中看到類庫函數的自定義說明。前提是代碼裏面使用「///」生成註釋。
VS2005不存在這個問題,VS2013好像也不存在這個問題。
這個問題的範疇過於龐大,可以形成這方面問題的緣由可能有不少,我記得比較分散,後面找到了陸續補充。
(1)版本不匹配。
(2)類庫生成x86仍是x64仍是AnyCPU,最好可以作到目標平臺保持一致。
(3)兩個項目引用路徑不一樣,或生成個路徑不一樣。
(1)首先,參考這個地方。http://blog.csdn.net/qiujiahao/article/details/2775262;
(2)其次,出現這個問題,頗有多是由於兩個項目調用了相同的DLL,可是兩個DLL版本不一樣,須要使這兩個版本相同便可。
(1)修改Program.cs,按照Winform程序的方式來修改便可。
(2)修改應用程序的屬性,在應用程序——輸出類型中修改成Windows應用程序。
背景:這個問題很坑,很難發現問題所在。如一個解決方案中有項目A,生成類庫,testA.dll;還有項目B,生成類庫,testB.dll。若是項目B的程序集名稱和默認命名空間設置成了testA,則編譯不會報錯,可是你這時候想調用testB中的方法時,會發現根本找不到,全是testA的方法!
解決辦法:右鍵查看項目(也有多是相關項目)的程序集名稱和默認命名空間。是否與類庫名稱一致。
如上圖:修改第一行Format Version 爲9.00.修改第二行爲Visual Studio 2005。
dataGridView1.Columns[n].DefaultCellStyle.Format = "yyyy-MM-dd";
坑到爆的問題來了……這個問題出現大可能是由於混亂的項目引用。如下提供幾個可能有用的解決方案:
方案一:在VS菜單的生成中,選擇「清理解決方案」,而後從新生成解決方案。
方案二:實際上有比這個辦法更好的辦法,就是將出問題的文件用notepad打開,而後另存爲Unicode編碼,覆蓋原來的文件。
方案三:經過從新格式化出問題的源文件亦能夠解決,即在VS2005中選擇 「編輯」——〉「高級」——〉「設置選定內容的格式」。
以上三個方案參考自:http://blog.csdn.net/zztoll/article/details/6688949
實際上我都用了,沒用!
最後解決辦法的:
根據分析,以及這篇文章的內容,出現此問題是由於我直接引用了DLL,而不是直接引用項目。DLL還未從新編譯的時候,直接運行了程序,則形成DLL內容尚未更新,調試沒法運行到斷點。
#region
float 單精度浮點 32bit,
double 雙精度浮點64bit,
decimal是高精度 128bit,浮點型。
float double 是 基本類型(primitive type),decimal不是。
float 有效數字7位,範圍 ±1.5 × 10E−45 to ±3.4 × 10E38
double 有效數字15/16 位,範圍 ±5.0 × 10 E−324 to ±1.7 × 10E308
decimal 有效數字 28/29 位,範圍 ±1.0 × 10E−28 to ±7.9 × 10E28( E -- 下接幾回方)
decimal的有效位數很大,達到了128位,可是表示的數據範圍卻比float和double類型小。
使用的時候會對計算時的性能有影響。
常數寫法:
float f = 12.3F; (帶F)
double x=12.3; (不帶就是double)
decimal d = 12.30M; (帶M)
浮點數運算會有精度損失問題,有精度損失時程序不會報告,要程序員本身注意。
#endregion
一、Remove例:
StringBuilder val = new StringBuilder();
val.Append("....");
val.Remove(0,val.Length);//清空
二、Replace
StringBuilder val = new StringBuilder();
val.Append("....");
val.Replace(val.ToString(), "");//清空
三、Length
StringBuilder val = new StringBuilder();
val.Append("....");
val.Length = 0;//清空通過測試第三種效率更高,推薦用第三種!
當left join的那個表(子表),on的字段存在兩條,那麼查詢出來的結果會分爲兩條。
——因此對於子表內容掌控不許確,極可能會查詢出不符合需求的結果。
例子:
(1)兩個表的內容是
(2)left join的結果
——好比主表A爲大掃除任務安排表,其中包含「掃地的學生ID」,「倒垃圾的學生ID」,能夠經過兩次關聯學生信息表B,來在主表中查詢出學生姓名。
——如下例子與上面的舉例無關。僅供參考。
如上圖convert。注意使用union all能夠顯著提升速度,這樣的話,不會對查詢結果進行排序。
應用背景:應用軟件包含多個數據庫服務器,可是某個查詢須要從兩個數據庫服務器的數據庫中查詢數據的。
使用說明:
(1)添加一個連接服務器。
exec sp_addlinkedserver @server='serverontest',@provider='sqloledb',@srvproduct='',@datasrc='101.123.10.112'
(2)添加登陸方式
EXEC sp_addlinkedsrvlogin @rmtsrvname = 'serverontest', @useself = 'false', @locallogin = 'sa', @rmtuser = 'sa', @rmtpassword = 'passwordofsa'
(3)以上兩個語句中,@server爲服務器的別名,@datasrc爲要連接的目標數據庫的鏈接串,@rmtsrvname爲別名,@locallogin爲本地登陸的用戶名,@rmtuser和@rmtpassword爲要連接的目標數據庫的登陸用戶名和密碼。
(4)添加完連接服務器以後,能夠經過select * from sys.linked_logins 和 select * from sys.servers來查看已經添加的連接服務器和登陸角色。
(5)添加完連接服務器後,使用select * from 別名.庫名.dbo.表名 來對其中的數據進行查詢。
(6)刪除連接服務器登陸映射和連接服務器的方法:
exec sp_droplinkedsrvlogin ’serverontest’ ,’sa’
exec sp_dropserver ’serverontest’
物理刪除時真正的刪除了,邏輯刪除還保留數據在數據庫中的位置,可是修改其刪除標誌爲已刪除狀態(貌似這個在大學裏面就學了……)
如:當用戶進行操做B的時候,須要先開啓選項A。設當前選項A爲關閉狀態,用戶進行操做B,此時應提示:「操做失敗,選項A未啓用,請到XXX設置中開啓選項A」。在某些應用中,甚至能夠增長直接跳轉到設置的地方,或者直接修改設置。根據須要而定。
——提醒用戶改作什麼,我的認爲是應該的,體現友好度。可是不該該把代碼中具體的異常暴露出來,具體異常應該記錄日誌,並使用異常編碼,在文檔中、代碼中管理起來。
命令行輸入:netstat -ano
%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\installutil.exe E:\myService\ServiceTest.exe
Net Start ServiceTest
sc config ServiceTest start= auto
前提是,你所要安裝的服務,所在路徑不能包含空格。如常見的Program Files,就會形成安裝失敗。
若是安裝的時候,命令行窗口一閃而過沒有看到什麼狀況,能夠自行在命令提示符裏面執行以上的腳本以查看報錯。或者在結尾加上pause
PS:一個一直支撐個人寶貴經驗:
哈佛有一個著名的理論:人的差異在於業餘時間,而一我的的命運決定於晚上8點到10點之間。每晚抽出2個小時的時間用來閱讀、進修、思考或參加有意的演講、討論,你會發現,你的人生正在發生改變,堅持數年以後,成功會向你招手。