2017年4月27日 星期四

網購系統 POS系統 整合系統

系統越作越大,客戶需求越來越複雜化!
POS系統,採用ERP架構當基底平台
可支援任何資料格式交換 格式(XML.XLS.CSV.TXT.ODS)

2017年上半年新作:
Web Mobile Design APP for Shopping Cart Link POS System
歡迎各行各業有興趣客製化相關Web.Mobile AAP+實體POS,私訊談洽!!

區分三個區塊:

前端 :







後端:







POS前台:




2017年4月22日 星期六

IF EXISTS VS SELECT COUNT(*)

引用來源:IF EXISTS VS SELECT COUNT(*)
--
寫 T-SQL 語法時,常常需要判斷某些筆資料是否存在,重點是資料存在與否,來進行接下來的邏輯判斷,而非資料明細內容或是有多少筆數,此情況建議使用 IF EXISTS() 來達到此要求,而不要使用 SELECT COUNT(*) 來判斷,主要原因是因為 IF EXISTS() 只會判斷資是否有資料,當出現第一筆符合條件的資料,就不會繼續往下尋找,而 SELECT COUNT(*) 則是會找出全部資料才停止,SELECT COUNT(*) 會浪費較多的 I/O 和 CPU 處理時間。

-- 範例使用 AdventureWorks 內的 Sales.StoreContact 來說明

-- 建議用法
IF EXISTS(SELECT 1 FROM Sales.StoreContact WHERE CustomerID = 24)
    -- 邏輯判斷
 
-- 避免用法 1
IF EXISTS(SELECT COUNT(*) FROM Sales.StoreContact WHERE CustomerID = 24)
    -- 邏輯判斷
 
-- 避免用法 2
DECLARE @count int
SET @count = 0
SELECT @count = COUNT(*) FROM Sales.StoreContact WHERE CustomerID = 24
IF @count > 0
   -- 邏輯判斷
   
-- 避免用法 3
IF (SELECT COUNT(*) FROM Sales.StoreContact WHERE CustomerID = 24) > 0
    -- 邏輯判斷

2017年4月15日 星期六

C# 如何用VS2005寫出FTP的上傳/下載/取得FTP伺服器目錄清單的功能

以下是使用Visual Studio 2005 C #所寫的FTP 上傳/下載及取得清單的程式範例,而這個的.Net Framework需為2.0或以上.
首先,大至上講解一下,在使用FTP時,所以使用到的幾個FTP物件FtpWebRequest,FtpWebResponse,WebRequestMethods. 這四個為FTP中,較為重要的幾個(當然範例中也有用到Stream,FileStream,StreamReader,NetworkCredential, WebRequest但這幾個並非是FTP才會用到的,所以不做特別介紹,如果需要瞭解,可點取連結至MSDN參考說明).其中以FtpWebRequest, FtpWebResponse, WebRequestMethods這三個物件為.Net 2.0才有的,1.0,1.1並沒有.
FtpWebRequest主要就能與FTP伺服器產生互動的功能,例如設定Timeout逾時設定,KeepAlive保持連線,EnableSsl設定是否使用SSL連線,Credential通訊協定認證,GetResponses取得伺服器回應,GetRequestStream用來上載至伺服器的資料流等,看到這個地方,大概就能知道,這一個物件是用來上傳使用的,並且設定其通訊協定.
而另一個物件FtpWebResponse,主要是用來取得伺服器對要求的回應,像是StatusCode取得FTP伺服器回傳最新的狀態碼,WelcomeMessage驗證完成後,所取得到的文字,LastModified取得FTP伺服器上的檔案最近的修改日期及時間,GetResponseStream擷取FTP伺服器回應的資料流(簡單的說,就是下載).
WebRequestMethods,用來設定通訊協定的命令,這樣看起來似乎很難懂,當我們在宣告FtpWebRequest時,就需要設定Method,舉例來說:
FtpWebRequest listRequest = (FtpWebRequest)WebRequest.Create(listUrl);
listRequest.Method = WebRequestMethods.Ftp.ListDirectoryDetails; //用來取得目錄的檔案清單
listRequest.Method = WebRequestMethods.Ftp. UploadFile;//上傳檔案
listRequest.Method = WebRequestMethods.Ftp. DownloadFile;//上傳檔案
由此大概就可以知道,它是在設定FtpWebRequest傳送至FTP伺服器的命令.當然也包含DeleteFile刪檔,Rename更名…等.
以上三個FtpWebRequest,FtpWebResponse,WebRequestMethods的更多詳細用法,請參考Visual Studio 2005的Help.
接下來就要帶到,如何用C#寫出下載,上傳及取得清單的方法 :
1. 下載程式範例
internal bool Download(string downloadUrl,string TargetPath, string UserName, string Password)
{//downloadUrl下載FTP的目錄ex : ftp//127.0.0.1/abc.xml , TargetPath本機存檔目錄,UserName使用者FTP登入帳號 , Password使用者登入密碼
Stream responseStream = null;
FileStream fileStream = null;
StreamReader reader = null;
try
{
FtpWebRequest downloadRequest = (FtpWebRequest)WebRequest.Create(downloadUrl);
downloadRequest.Method = WebRequestMethods.Ftp.DownloadFile; //設定Method下載檔案
if (UserName.Length > 0)//如果需要帳號登入
{
NetworkCredential nc = new NetworkCredential(UserName, Password);
downloadRequest.Credentials = nc;//設定帳號
}
FtpWebResponse downloadResponse = (FtpWebResponse)downloadRequest.GetResponse();
responseStream = downloadResponse.GetResponseStream();//取得FTP伺服器回傳的資料流
string fileName = Path.GetFileName(downloadRequest.RequestUri.AbsolutePath);
if (fileName.Length == 0)
{
reader = new StreamReader(responseStream);
throw new Exception(reader.ReadToEnd());
}
else
{
fileStream = File.Create(TargetPath+@"\"+fileName);
byte[] buffer = new byte[1024];
int bytesRead;
while (true)
{//開始將資料流寫入到本機
bytesRead = responseStream.Read(buffer, 0, buffer.Length);
if (bytesRead == 0)
break;
fileStream.Write(buffer, 0, bytesRead);
}
}
return true;
}
catch (IOException ex)
{
throw new Exception(ex.Message);
}
finally
{
if (reader != null)
reader.Close();
else if (responseStream != null)
responseStream.Close();
if (fileStream != null)
fileStream.Close();
}
}
2. 上傳程式範例
internal bool Upload(string fileName, string uploadUrl,string UserName,string Password)
{//fileName上傳的檔案ex : c:\abc.xml , uploadUrl上傳的FTP伺服器路徑ftp://127.0.0.1,UserName使用者FTP登入帳號 , Password使用者登入密碼
Stream requestStream = null;
FileStream fileStream = null;
FtpWebResponse uploadResponse = null;
try
{
FtpWebRequest uploadRequest = (FtpWebRequest)WebRequest.Create(uploadUrl);
uploadRequest.Method = WebRequestMethods.Ftp.UploadFile;//設定Method上傳檔案
uploadRequest.Proxy = null;
if (UserName.Length > 0)//如果需要帳號登入
{
NetworkCredential nc = new NetworkCredential(UserName, Password);
uploadRequest.Credentials = nc; //設定帳號
}
requestStream = uploadRequest.GetRequestStream();
fileStream = File.Open(fileName, FileMode.Open);
byte[] buffer = new byte[1024];
int bytesRead;
while (true)
{//開始上傳資料流
bytesRead = fileStream.Read(buffer, 0, buffer.Length);
if (bytesRead == 0)
break;
requestStream.Write(buffer, 0, bytesRead);
}
requestStream.Close();
uploadResponse = (FtpWebResponse)uploadRequest.GetResponse();
return true;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
finally
{
if (uploadResponse != null)
uploadResponse.Close();
if (fileStream != null)
fileStream.Close();
if (requestStream != null)
requestStream.Close();
}
}
3. 取得清單程式範例
internal Hashtable List(string listUrl,string UserName,string Password)
{//listUrl FTP伺服器路徑ftp://127.0.0.1,UserName使用者FTP登入帳號 , Password使用者登入密碼
StreamReader reader = null;
try
{
FtpWebRequest listRequest = (FtpWebRequest)WebRequest.Create(listUrl);
if (UserName.Length > 0)//如果需要帳號登入
{
NetworkCredential nc = new NetworkCredential(UserName, Password);
listRequest.Credentials = nc; //設定帳號
}
listRequest.Method = WebRequestMethods.Ftp.ListDirectoryDetails;// //設定Method取得目錄資訊
FtpWebResponse listResponse = (FtpWebResponse)listRequest.GetResponse();
reader = new StreamReader(listResponse.GetResponseStream());
Hashtable ht = new Hashtable();
int i=0;
while (reader.Peek()>=0)
{//開始讀取回傳資訊
ht[i] = reader.ReadLine();
i++;
}
return ht;//回傳目前清單
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
finally
{
if (reader != null)
reader.Close();
}
}
上面三個程式範例為基本的程式範例,當中當然還可以加入一些判斷,例如最常出錯的就是url,這點要注意的是,URL的最後面不需跟著[ / ],正確的URL : ftp://127.0.0.1 , 錯誤的URL : ftp://127.0.0.1/ ,所以在URL的部份,可以加上這個的判斷,減少因為使用者誤Key,而導致的錯誤結果.

2017年4月8日 星期六

asp.net request.querystring null check

How to check that Request.QueryString has a specific value or not in ASP.NET?
--

// .NET < 4.0
if (string.IsNullOrEmpty(Request.QueryString["aspxerrorpath"]))
{
 // not there!
}

// .NET >= 4.0
if (string.IsNullOrWhiteSpace(Request.QueryString["aspxerrorpath"]))
{
 // not there!
}

2017年4月6日 星期四

obout - Home

obout 外掛元件 (完全免費)
---
Standard Suite for ASP.NET 2.0-4.5

Free for all. No expiration.
Download now and use forever for free.


Uploading files using jQuery AJAX and Generic Handler (ASHX) in ASP.Net

Uploading files using jQuery AJAX and Generic Handler (ASHX) in ASP.Net
---
多圖檔一次選取上傳!!

jQuery Ajax配WebService的以外選擇 - Ashx

明式: jQuery Ajax配WebService的以外選擇 - Ashx
--
不錯的寫法!!

Call ASP.NET Handler (ASHX) using JavaScript

Call ASP.NET Handler (ASHX) using JavaScript

ASP.NET 由淺入深

ASP.NET 由淺入深 系列文章列表 - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天
---
91篇唷...值得學習

2017年4月1日 星期六

asp.net updatepanel fileupload

FileUpload is not working within update panel
ASP.NET FileUpload in UpdatePanel - still not working
---
須要在 updatepanel 內的底部加入 :
YourControlID=確定儲存 (ADD & SAVE ID)
<Triggers>
  <asp:PostBackTrigger ControlID="YourControlID" />
</Triggers>

---
PostBackTrigger 類別
裡面的事件寫法要注意!
不可加入 Handles  否則會跑2次! 若上傳檔案至DB會變成NULL
原則上 跑2次就不對了!

Protected Sub UploadButton_Click(ByVal sender As Object, ByVal e As EventArgs)

這樣寫法即可!