發表文章

Dynamic Change Web Services IP Address

使用WebService來進行資料庫存取,如果遇到客戶資料庫主機更改位址的情況,在無從新發行的條件下,可在先前再程式內撰寫自動抓取新的資料庫位址 using WebServiceNameSpace; protected void Page_Load(object sender, EventArgs e) { ServiceName Sn = new ServiceName(); Sn.Url = "http://127.0.0.1/WebService/Class.asmx" Sn.Discover(); //更新位址 } 再搭配Web.Config即可在發行後克服客戶主機位址改變的問題

另用CSS 來達成 HTML文字自動截斷

//==HTML文字自動截斷... string divCSS = "width: 400px; text-overflow: ellipsis; overflow: hidden; white-space:nowrap;"; strbody += "<table width='100%' border='0' cellspacing='0' cellpadding='3'>"; while (!rs.Read()) {   strbody += "<tr>";   strbody += " <td width='4%'> </td>";   strbody += " <td width='4%' valign='top'><img src='../Images/icon-05.gif' /></td>";   strbody += " <td width='96%'><div style='" + divCSS + "'>" +rs["id"].ToString() + "</div></td>";   strbody += " <td width='4%'> </td>";   strbody += " </tr>";   rs.MoveNext(); } strbody += "</table>"

讀取硬碟序號、主機板序號、MAC位址(使用 WMI)

透過WMI,我們可以很方便的取得主機的各種資訊,下列舉例三種取得硬體資訊的方法,使用前必須先加入using System.Management;命名空間

SqlTransaction VS TransactionScope

新的事務處理架構不再與數據庫綁在一起,而是從代碼塊的角度,當在通過 new 語句實例化 TransactionScope 時,事務管理器將確定要參與哪個事務。一經確定,此範圍將始終參與該事務。 也就是說只要是代碼塊是可以被事務管理器所管理的,則允許該代碼塊範圍所參與的事務繼續。如果事務範圍中的代碼發生了異常,它所參與的事務將回滾。也只有 當應用程序完成它要在一個事務中執行的所有工作以後,您應當調用TransactionScope的Complete 方法,以通知事務管理器可以接受提交事務。如在代碼塊內未能調用此方法將中止該事務,也就是隱式的進行了Rollback。對 Dispose 方法的調用標誌著該事務範圍的結束。在調用此方法之後發生的異常不會影響該事務。

WebService 利用SOAP標頭來進行帳號密碼驗證

利用WebService來撰寫三層式架構的中間層是一個不錯的方法,但是 由於WebSerivce夠開放(資料庫存取直接暴露在網際網路上),這是微軟給予有心人士天大的恩賜,難免有一些安全性不足的缺點,在此可以利用 SOAP標頭來進行一些基本的安全防護,至少可以避免一些不會必要的攻擊。

ADO.NET 建立連線字串

程式中建立Dbconnection物件時,需提供連線字串、資料庫伺服器、名稱、安全性資訊,以下為連線字串的索引鍵。 Application Name :應用程式名稱,若沒有提供,預設為 .Net SqlClient Data Provider。 AttachDBFilename :也可寫為 extended properties 或 Initaial File Name,資料庫檔案的名稱,需包含完整路徑,可搭配 |DataDirectory| 來設定相對路徑。且資料庫不能是唯讀,不支援HTTP格式。

SQL 格式化字串

查詢結果格式化成特定字數,例如 查詢出 39 格式化成039 select right(cast(power(10,3) as varchar) + caseno ,3) as caseno from ofdoc 分析 1、select power(10,3)得到1000 2、select cast(1000+33 as varchar) 將1000轉換類型 3、select right(100039,3) 從右邊取3個字串得到039

利用OleDb讀取csv檔 字串問題

如果同一個資料欄位存在 數字 和 字串 的話,使用這個方法預設會判定為 數值 , 因此字串的資料就會消失不見,因此必須動態加入.ini,但是個人認為除非上傳的檔案都是同樣的相同的檔名就 可以這樣用,不然的話多人同時存取的時候可能會有lock的問題存在。 下面第二種方法使用資料流來讀取資料就沒有會將字串判定為數值的事情發生了

使用NET內建FTP出現中文檔名變亂碼

本來興高采烈的寫出NET 上傳下載的FTP後測試一切正常,結果在最後階段發現中文檔名出現亂碼(內文正常),查了老半天因為能力不足無法解決,最後只好靠不太會操作的 win32API終於解決了中文檔名的問題,不過也折騰了好幾天,真是要多加油了><。 NET 的FTP改成可以多個檔案上傳並且再最後一的檔案時關閉FTP連線使用ftpReq.KeepAlive = true; NET竟然沒有CLOSE 所以我也沒辦法測試這樣是否真的關閉,至於API部分,由於目前台灣時間是早上五點半,在不睡就要死了,所以改天有機會再寫了

WebService 使用多載

WebService預設是不能使用多載,但只要使用WebMethod的屬性MessageName給予不同的名稱並修改 WebServiceBinding (預設為BasicProfile1_1) ,就可以正常使用了。 [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.None)] public class ServiceUserAdmin : System.Web.Services.WebService { [WebMethod(MessageName = "SingleStrSQL")]//T-SQL查詢 [SoapHeader("soapSet")] public DataSet sqlDs(string strSQL) { if (ValidUser() == false) return myErrDs; try { return objSql.RunDataSet(strSQL); } catch (Exception ex) { throw ex; } } [WebMethod(MessageName = "IncoludConnectionString")]//T-SQL查詢變更資料庫連線 [SoapHeader("soapSet")] public DataSet sqlDs(string strSQL, string myConnectionString) { if (ValidUser() == false) return myErrDs; try { return objSql.RunDataSet(strSQL, myConnectionString); } catch (Exception ex) { throw ex; } } } 

計算執行時間程式執行時間

在寫程式的時候我們常常需要測量程式執行時間 .NET本身有提供所謂的效能計數器 精度非常高 但是使用上比較繁瑣 如果我們需要簡單的測量時間就好 對幾一千分之一秒的時間誤差沒有很刻求 那以下有兩種常用的方法可以簡單的計算目標程式所花費的執行時間

傳統發送mail VS 多執行緒發送mail

最近要寫一個電子報發送程式,由於可能同時點選多封郵件同時發送,通常會寫一個function呼叫執行,但可能會因為太多郵件造成超時,因此必須改成多執行緒發送郵件 傳統方式 //發送電子報 protected void SendMail() { try { MailAddress fromMail = new MailAddress("發信者信箱", "電子報標題", System.Text.Encoding.UTF8); MailAddress toMail = new MailAddress("收件者信箱", "收件者姓名"); MailMessage message = new MailMessage(fromMail, toMail); message.Subject = cobEName.Text; message.Body = "這裡是電子報發送的內容"; message.IsBodyHtml = true; message.Headers.Add("Disposition-Notification-To", "<回傳的mail>"); SmtpClient mailClient = new SmtpClient("SMTPServer"); mailClient.Credentials = new System.Net.NetworkCredential(txtLoginID.Text, txtLoginPwd.Text);//取得或設定驗證資料 //mailClient.EnableSsl = true;//指定 SmtpClient 是否使用 SSL 加密連線 //mailClient.Port = 587; mailClient.Send(message); } catch (Exception ex) { MessageBox....

正則表達式

正則表達式生來就為了處理字串而活,偏偏卻很難看的懂,例如以下舉例是在檢查E-mail帳號是否正確 var objMail = document.all.txtMail; var rege = /^[\w]+([._-]?[a-z0-9]+)*@[\w]+([._-]?[\w]+)*[\w]$/; if(objMail.length == 0 || rege.exec(objMail .value) == null) { alert('錯誤'); } else { alert('對了'); } 看不懂的話只要多測試,相信應該不會很困難 以下幾個網站可以提供參考 http://caterpillar.onlyfun.net/Gossip/JavaGossip-V1/RegularExpression.htm Java驗證格式 http://momokao.pixnet.net/blog/post/10307155 Java驗證格式 http://www.fboss.com/article.asp?id=683 JavaScript驗證格式 http://annyhunt.pixnet.net/blog/post/537799 JavaScript驗證格式 http://phone.idv.tw/cs2/forums/thread/424.aspx ASP.NET驗證格式

WinForm 背景圖

在winform表單上加上背景圖,並使Label透明,網路上流傳許多像label1.BackColor = System.Drawing.Color.Transparent這樣的語法,其實是不正確的,這樣只是會讓label標籤的背景跟winform表單 一樣的顏色。 在winform繪製背景圖主要有下列三種方式

使用API關閉特定應用程式

在此舉例開啟了一個IE瀏覽器視窗 //關閉IE [DllImport("user32.dll")] public static extern int FindWindow(string strclassName, string strWindowName); [DllImport("user32.dll")] private static extern int SendMessage( int hWnd,   // handle to destination window int Msg,    // message int wParam, // first message parameter int lParam // second message parameter ); const int WM_KEYDOWN = 0x0100; const int WM_KEYUP = 0x0101; const int WM_SYSCOMMAND = 0x0112; const int SC_CLOSE = 0xF060; private void closeIE() { //dd 為開啟網頁的Title int a = FindWindow("IEFrame", "dd - Microsoft Internet Explorer"); if (a > 0) { SendMessage(a, WM_SYSCOMMAND, SC_CLOSE, 0); } }

SqlDataSource 撰寫在後端程式碼的運用

SqlDataSource的運用方法通常由精靈產生主要用在aspx頁面,下面的例子則是撰寫在.cs檔的用法,舉查詢為例,其它的用法大致上相同 SqlDataSource sqlDataSource1 = new SqlDataSource(); sqlDataSource1.ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ToString(); string strsql = "select d.*, c.* from ProductClass c right join( " + "select * from ProductBase a left join " + "(select ProID as bProID, IsAfresh , Photo3 from ProductInfo)b " + "on a.ProID= bProID where a.DepID=@DepID) d " + "on c.ClassID = d.ClassID order by d.ProID Desc"; sqlDataSource1.SelectCommand = strsql; sqlDataSource1.SelectParameters.Add("DepID", Session["DeptID"].ToString()); //sqlDataSource1.DataSourceMode = SqlDataSourceMode.DataSet GridView1.DataSource = sqlDataSource1; GridView1.DataKeyNames = new string[] { "ProID" };//主鍵 GridView1.DataBind(); sqlDataSource1.Dispose();

SortedList (C#陣列)

表示索引鍵/值組配對的集合,這個集合按索引鍵排序,而且可以按索引鍵和索引存取。 using System.Collections; SortedList mySortList = new SortedList(); while (myDr.Read()) { //如果索引鍵不存在 if (mySortList.ContainsKey(myDr["usr_title"]) == false) {  mySortList.Add(myDr["usr_title"], myDr["usr_title"]);  drpTitle.Items.Add(myDr["usr_title"].ToString()); } } //另一例子 SortedList mySL = new SortedList(); mySL.Add(1.3, "fox"); mySL.Add(1.4, "jumped"); mySL.Add(1.5, "over"); mySL.Add(1.2, "brown"); mySL.Add(1.1, "quick"); mySL.Add(1.0, "The"); mySL.Add(1.6, "the"); mySL.Add(1.8, "dog"); mySL.Add(1.7, "lazy"); // Gets the key and the value based on the index. int myIndex = 3; Console.WriteLine("The key at index {0} is {1}.", myIndex, mySL.GetKey(myIndex)); Console.WriteLine("The value at index {0} is {1}.", myIndex, mySL.GetByIndex(myIndex)); // Gets the list of keys ...

FCKeditor NET版 HTML編輯器

好用的HTML 編輯器,使用方式請查閱 官方網站 內建有:asp,aspx,php...等 (預設為PHP),因此要改成aspx 設定\fckeditor\fckconfig.js,設定方法並不複雜,筆者建議直接用記事本編輯即可 打開fckconfig.js,利用搜尋找到

C# 寄送郵件範例

要使用讓系統可以寄送郵郵件前,必須擁有SMTP伺服器帳號,寄送郵件必須引用命名空間 using System.Web.Mail;,加入以下程式碼,就可以了。 MailMessage myMail = new MailMessage(); myMail.From = "發送者電子郵件"; myMail.Subject = "主旨"; myMail.To = "收件者電子郵件"; myMail.Bcc = "副本使用者"; myMail.BodyFormat = MailFormat.Html; //使用html格式寄送 myMail.Body = "內容"; SmtpMail.SmtpServer = "SMTP"; SmtpMail.Send(myMail);

ASP.NET2.0 cookies中文寫入 在IE瀏覽器時會出現亂碼

運用UrlEncode編碼、UrlDecode解碼可解決此問題 //寫入cookies包含日期7天 HttpCookie cookie = new HttpCookie("Member"); cookie.Expires = DateTime.Now.AddDays(7); cookie.Values["ID"] = HttpUtility.UrlEncode(txtUserName.Text.Trim()); Response.Cookies.Add(cookie); //寫入cookies不包含日期 HttpCookie cookie = new HttpCookie("Member"); cookie.Values["ID"] = HttpUtility.UrlEncode(txtUserName.Text.Trim()); Response.Cookies.Add(cookie); //讀取cookies Label1.Text = HttpUtility.UrlDecode(Request.Cookies["Member"]["ID"]) ; //刪除cookies if (Request.Cookies["Member"] != null) { HttpCookie cookie = new HttpCookie("Member"); cookie.Expires = DateTime.Now.AddDays(-365); Response.Cookies.Add(cookie); }

透過 Google SMTP 寄送郵件

圖片
要使用Gmail 來寄送郵郵件前,必須擁有 gamil 帳號,寄送郵件必須引用命名空間 using System.Net; 在 Form 內部加入以下程式碼,就可以了。

Mutex 的使用方法(預防程式啟動多次)

同一隻程式不可以啟動兩次(含)以上...可以這樣處理,打開Program.cs,引用 using System.Threading; 命名空間後,在 class 內部加入以下程式碼,就可以了。

SQL Server Express 資料庫遠端連線設定

圖片
SQL Server 2005 Enterprise 在遠端連線通常不會有問題,但SQL Server Express版本卻常出現不能連線,一直出現連線被拒(遠端連線失敗 TCP/IP 連線有問題)。 其實 SQL Server Express 資料庫是可以遠端連線(TCP/IP 連線),但是預設是沒打開的,以下步驟就來告訴各位如何正確的開啟。 (1) 開啟 Management Studio Express:在「物件總管」視窗的「伺服器」按右鍵選「屬性」,如圖(一)所示;選取「安全性」頁籤並在 "伺服器驗證" 的地方選取「SQL Server 及 Windows 驗證模式」,如圖(二)所示。

SQL SERVER 資料庫線上備份還原

本範例非離線備份,離線備份常用於ACCESS資料庫,因為ACCESS允許檔案直接複製 資料備份語法

多個檔案共用一個App.config

app.config檔案的內容 <configuration> <connectionstrings> <add connectionstring="XXXX" name="Test4" providername="System.Data.SqlClient"/> <appsettings> <add key="Test1" value="這是組態檔第一筆資料"/> <add key="Test2" value="這是組態檔第二筆資料"/> <add key="Test3" value="這是組態檔第三筆資料"/> </appsettings> </configuration>