最近遇到要在windows桌面程式中用程式去開啟加密過的PDF文件,並且要在程式中讓使用者輸入PDF開啟密碼後直接開啟檔案,即檔案開啟不再要求輸入密碼,由於Adobe好像無法以command的方式帶入密碼開啟檔案,也查無相關API,最後只好另外找了元件iTextSharp來代替。
在將iTextSharp加入專案後,可以用PdfReader讀入加密過的PDF檔案,並進行PDF文件的操作
最近遇到要在windows桌面程式中用程式去開啟加密過的PDF文件,並且要在程式中讓使用者輸入PDF開啟密碼後直接開啟檔案,即檔案開啟不再要求輸入密碼,由於Adobe好像無法以command的方式帶入密碼開啟檔案,也查無相關API,最後只好另外找了元件iTextSharp來代替。
在將iTextSharp加入專案後,可以用PdfReader讀入加密過的PDF檔案,並進行PDF文件的操作
如果GridView還沒有被繫結資料時,就做gv.Columns[0].Visible = false,那麼就會造成PostBack後無法取得隱藏欄位的值,因為此欄位並沒有Render程Html到前端,
所以應該要在GridView.RowCreated 事件中隱藏欄位,Create事件是在DataBound後發生的,所以此時資料已經繫結到GridView,就不會發生PostBack取不到值的狀況
protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e) { e.Row.Cells[RowIndex].Visible = false; }
查詢
// 查詢 var result = from q in mydt.AsEnumerable() select q; // 防止NULL值 if (result.FirstOrDefault<DataRow>() != null) { DataTable dt = result.CopyToDataTable<DataRow>(); foreach (DataRow dr in dt.Rows) { Response.Write( string.Format("{0} - {1} - {2} - {3}", dr["Id"].ToString(), dr["Name"].ToString(), dr["Age"].ToString(), dr["Sex"].ToString())); } }
WHERE
// 有條件查詢 var result = from q in mydt.AsEnumerable() where q.Field<int>("Age") > 30 select new UserInfo() { Id = q.Field<int>("Id"), Name = q.Field<string>("Name"), Age = q.Field<int>("Age"), Sex = q.Field<int>("Sex") }; foreach (UserInfo info in result) { Response.Write(string.Format("{0} - {1} - {2} - {3}", info.Id, info.Name, info.Age, info.Sex)); }
COUNT
ASP.NET與ASP的差別在於,ASP.NET不是ASP版本的更新,而是一個全新的統一Web開發平臺。ASP是以直譯式語言架構,每次讀取網頁皆需逐行編譯程式碼,執行效率不佳;而ASP.NET則是編譯式語言,執行編譯過的原生機器碼使效能大幅提升。兩者皆可在記事本撰寫程式,更重要的是,ASP.NET不限於VBScript或JScript語言,可搭配Visual Studio .NET工具,使用任何.NET相容語言開發ASP.NET,包括Visual Basic .NET、Visual C#及JScript .NET。
ASP的副檔名為「.asp」,ASP.NET的副檔名為「.aspx」,兩者的撰寫模式相似性高,但是,ASP.NET的物件模型作了大幅修改,加強結構化和物件導向,並非完全回溯相容(Backward Compatible),大部分的ASP網頁必須大幅修改過後才能在ASP.NET下執行。
最近遇到的問題:
System.Web.HttpException: URL 編碼型式資料無效。 ---> System.InvalidOperationException: 由於該物件目前的狀態,導致作業無效。 於 System.Web.HttpValueCollection.ThrowIfMaxHttpCollectionKeysExceeded() 於 System.Web.HttpValueCollection.FillFromEncodedBytes(Byte[] bytes, Encoding encoding) 於 System.Web.HttpRequest.FillInFormCollection() --- 內部例外狀況堆疊追蹤的結尾 --- 於 System.Web.HttpRequest.FillInFormCollection() 於 System.Web.HttpRequest.get_Form() 於 System.Web.HttpRequest.get_HasForm() 於 System.Web.UI.Page.GetCollectionBasedOnMethod(Boolean dontReturnNull) 於 System.Web.UI.Page.DeterminePostBackMode() 於 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
沒辦法下中斷點看問題在哪,因為還沒進Page_Load頁面就掛了,Google了一下發現
ASP.NET 在處理 HTTP POST 要求時最多只能接受 1000 個參數,當參數超過1000個時就會出現這個錯誤
Access 連線:
connectionString="Provider=Microsoft.Jet.OleDb.4.0;Data Source=mdb路徑"
MSSQL連線:
connectionString="Data Source=主機名稱;User ID=帳號;Password=密碼;Initial Catalog=DB名稱;Persist Security Info=True; providerName="System.Data.SqlClient"
匯出Excel網路上能查到很多種方式,像是NPOI、EPPlus、ClosedXML等
但偶爾會遇到不能使用這些套件的環境,所以這邊以 Interop.Excel 操作為例
將DataTable匯出為Excel,匯出格式為xlsx檔
WebControls中的Button控制項或ImageButton在Render成 Html 後 type屬性會變成 submit 例:<input type="submit" value="submit">
這時在後端Page_Load中無法用Request.Form["__EVENTTARGET"]取得控制項ID,因為他們並不會觸發__doPostBack的機制
以下為替代方法
今天遇到要寫入大量資料的情形,一開始沒想到資料量相當龐大(一開始我也不曉得到底有多少資料)
就自然的跑迴圈一筆一筆Insert,結果程式一跑下去還以為當機,整個停擺不動,嚇我一跳,
這時才想到應該是資料量太大,Insert時間太長了,就查了下資料來源...
Response.Redirect(String url)會呼叫Response.Redirect(String url, bool endResponse)
當endResponse為true(預設)時,就會呼叫 Response.End() 並拋出 ThreadAbortException
如果系統有記錄Log就會擷取到錯誤訊息,若要避免這時產生錯誤的話,endResponse傳入false就行了
在Asp.net 中,使用「擷取使用者控制項」功能將aspx中設計好的多個控制項一次包成一個使用者控制項
1.在 .aspx 原始檔模式中選取欲打包的程式碼,右鍵選擇「擷取使用者控制項」