2009年7月6日 星期一

如何利用批次檔取得今日的日期或時間,甚至是部分的日期或時間

如何利用批次檔取得今日的日期或時間,甚至是部分的日期或時間

Windows 2000/XP/Server 2003 有兩個未公開的環境變數,可以顯示目前的日期與時間,分別是 %date% 與 %time%,透過這兩個環境變數,管理者可以自行撰寫批次檔(.bat 或 .cmd檔)取得所需部分的日期或時間內容。就讓我們透過下面的範例來看看這兩個變數的內容,並如何搭配 FOR /F ["options"] %variable IN ("string") DO command [command-parameters] 指令取得所需的部分日期或時間內容。

先看看日期變數的內容是什麼:

C:\>echo %date%

螢幕輸出:
2006/03/07 星期二 <----- Windows XP/Server 2003 的結果
星期二 2006/03/07 echo %time%

螢幕輸出:
14:21:57.47

接著我們使用 FOR 指令來把日期的分隔符號「/」以及空白(White Space)去掉,並將其結果顯示在螢幕上(下面的解說是以 Windows XP/Server 2003 為例,如果是 Windows 2000,則請自行舉一反三):

MyDate.bat 的檔案內容如下所示:
----程式開始---- 
REM 取得日期
FOR /F "tokens=1-4 delims=/ " %%a IN ("%date%") DO (
SET _MyDate=%%a%%b%%c%%d
)

REM 顯示去掉分隔符號後的結果
echo %_MyDate%
----程式結束----

看看執行的結果:
C:\>MyDate

螢幕輸出:
20060307星期二

想不到只是透過幾行程式碼就可以去掉日期變數的分隔符號了,相信有不少人看不懂那段程式碼,就讓我簡單地說明一下吧!

/F 是指定將後面 %date% 的環境變數當成檔案來處理,而處理的依據就是在「"tokens=1-4 delims=/ "」這邊。tokens如果按照字面翻譯的話,是權杖的意思,這樣翻不太直覺,在這邊翻成順序可能比較好一些。以這個例子來說,就是要取得順序 1 ~ 4 的字串,那程式怎麼知道這個順序的分法呢?透過 delims 這個引述的設定,程式就知道要怎麼去分析 %date% 環境變數的順序。在 delims 等號右邊的字元就是用來指定分割順序的依據。以這個例子來說,我們用「/」與「 」(空白,White Space)這兩個分隔符號來分割 %date% 的順序。因此原本 %date% 的內容是 2006/03/07 星期二,在程式來看就變成了:

順序 內  容
﹉﹉ ﹉﹉﹉﹉
1    2006
2      03
3     07
4   星期二

%%a 是說把順序 1 的結果指派給名稱為 %%a 的變數,因此順序 2 的變數名稱就會是 %%b,以此類推,最多可以有 52 個變數,原因如下:變數名稱有大小寫之分,所以 %%a 跟 %%A 不同,且僅能以一個英文字母來命名,所以 26(個字母)× 2(大寫跟小寫 2 種)=52(個)。

DO 後面的括號內容是用來指定所要執行的命令內容,以這個例子來說,就是指定一個名稱為 _MyDate 的變數,它的內容是由 %%a%%b%%c%%d 所構成的。

再來我們看看使用 FOR 指令去掉時間變數之分隔符號的結果:

MyTime.bat 的檔案內容如下所示:
----程式開始---- 
REM 取得時間
FOR /F "tokens=1-4 delims=:." %%a IN ("%time%") DO (
SET _MyTime=%%a%%b%%c%%d
)

REM 顯示去掉分隔符號後的結果
echo %_MyTime%
----程式結束----

看看執行的結果:
C:\>MyTime

螢幕輸出:
14243241

2009年7月2日 星期四

執行 ASP.NET 出現 This application is currently offline

執行 ASP.NET 出現下列錯誤訊息
This application is currently offline. To enable the application, remove the app_offline.htm file from the application root directory

說明
Why Take an Application Offline?

There are two main reasons that you would normally want to take your application offline.

To make major changes to the application.(對程式作大幅度的改變)
To gain access to resources that cannot be accessed while in use.(存取相關資源)

讓程式暫時離線的情況有很多種。
例如:程式的架構有很大的改變,無法在不離線的狀態下,完成更新程式的動作。

The app_offline.htm File

在網站的第一層放入app_offline.htm的檔案。這個檔案對ASP.NET 2.0而言,是一個很特別的檔案。當它存在時,ASP.NET 2.0會把它視為程式的根,並關閉其他的程式,以這個程式回應任何使用者傳來的需求。這表示說基本上使用者會被拒絕在應用程式外,此時你可以有時間去對程式作改變。

解決方法
把專案資料夾中 app_offline.htm 檔 刪除即可

參考網頁http://kuanglian2000.wordpress.com/2006/12/22/taking-an-aspnet-20-application-offline%e8%ae%93%e7%b6%b2%e7%ab%99%e7%a8%8b%e5%bc%8f%e7%9f%ad%e6%9a%ab%e9%9b%a2%e7%b7%9a/

2009年6月30日 星期二

JavaScript 的 alert 是亂碼?如何解決 |

通常我們在寫程式時,會希望跳出一些訊息給使用者,但在我的實例中,遇到了跳出的視窗顯示為亂碼!!其代碼如下:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="950"%>
<%
Dim str
str="登入用戶名不能為空!"
if str<>"" then
response.Write "<script language=JavaScript>alert(""" & str & """);history.go(-1)</script>"
end if
%>

對不起,執行時都會出示亂碼,而不是中文字。(我的網頁採用utf-8編碼,並且在前端加上了Codepage指示詞)
經研究,這是沒有meta設定的關係。即使網頁最前端已有設定%@codepage=65001%,仍然沒用。有時,我的網頁結構特殊,不適合在找地方加上<meta>的設定時(如果可以直接加上meta設定,也可以解決這個問題),可以針對要alert之前,直接塞meta設定在前,這樣,顯示中文就會正常了!!修改如下:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<%
Dim strMeta
strMeta = "<meta http-equiv=""Content-Type"" content=""text/html; charset=utf-8"" />" '先把meta設定寫在變數strMeta中
str="登入用戶名不能為空!"
if str<>"" then
response.Write strMeta&"<script language=JavaScript>alert(""" & str & """);</script>" '直接加在java script之前,讓中文設定生效
end if
%>

就解決了

2009年6月22日 星期一

Asp.Net C# 加上 JavaScrip 開新視窗,列印

開新視窗,關閉工具列
ScriptManager.RegisterStartupScript(this, this.GetType(), "ALERT", "window.open('ABC.aspx','1234','top=100,left=100,width=720,height=740,toolbar=no');", true);

列印按鈕
ScriptManager.RegisterStartupScript(this, this.GetType(), "print", "javascript: window.print();", true);

彈出式訊息視窗
ScriptManager.RegisterStartupScript(this, this.GetType(), "ALERT", "alert('訊息');", true);

彈出式訊息視窗 + 確認後更換頁面
ScriptManager.RegisterStartupScript(this, this.GetType(), "ALERT", "alert('訊息!');window.location='ABC.aspx?A_Sno=1';", true);

2009年6月17日 星期三

具有潛在危險 Request.Form 的值已從用戶端偵測到

若是出現這樣的錯誤訊息,代表頁面上有文字內容是包含Html這類的語法,通常在使用一些Html的編輯器(留言板、討論區之類常用)做資料送出的動作的時候會發生。

解決辦法如下:

在頁面的Page指示語加入 validateRequest="false"

Ex:
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" validateRequest="false" %>

2009年6月16日 星期二

C# (ascx) usercontrol互相傳值

話說兩個不相信任的政黨..要互相移交政權..要好好的傳地下去..是有點給它難..
話說兩個不相關的usercontrol要互相丟值接值..感覺起來也是不怎麼好用..

google一下..可以發現有人提供一些方法..像interface這樣很正統的解決方法..不過.. 真的有點給它努力認真研究.. 才可以給它懂(我就是這樣懂的....) 如果看不懂或是想偷懶..那有啥方法呢?..有低..session..application都可以解決..

textbox.ascx..這一個usercontrol放一個textbox和一個button
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="textbox.ascx.cs" Inherits="usercontrol_textbox" %>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />

textbox.ascx.cs
protected void Page_Load(object sender, EventArgs e)
{

}
protected void Button1_Click(object sender, EventArgs e)
{
HttpContext.Current.Items["textbox"] = TextBox1.Text;
}

label.ascx..這一個usercontrol放一個label
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="label.ascx.cs" Inherits="usercontrol_label" %>
<asp:Label ID="Label1" runat="server" Text=""></asp:Label>

label.ascx.cs
protected void Page_Load(object sender, EventArgs e)
{

}
void Page_PreRender(object sender, EventArgs e)
{
Label1.Text = (string)HttpContext.Current.Items["textbox"];
}

CurrentItems.aspx..這裡把兩個usercontrol放進來..

<form id="form1" runat="server">
<div>
<uc1:textbox ID="textbox1" runat="server" />
<br />
<uc2:label ID="label1" runat="server" />
</div>
</form>

執行就可以抓到值啦
這裡就是用HttpContext.Current.Items["abc"]這東西..

參考:
http://msdn2.microsoft.com/zh-tw/library/system.web.httpcontext.items.aspx

(asp net)(c#) 讀取文字檔

asp net
一行一行的取讀取文字檔內的資料,並將所取的值回傳
Private Function GetTextString() As String
Dim value As String = ""
'Dim a As String = ""
Dim MySF As IO.StreamReader = New IO.StreamReader("c:1.txt", System.Text.Encoding.Default)
'value = MySF.ReadToEnd()
'讀取全部會包含換行符號
Do While Not MySF.EndOfStream
'讀取單行
value = MySF.ReadLine
Loop
Return value
End Function

c#
一行一行的取讀取文字檔內的資料
StreamReader stmRdr = new StreamReader("TextFile1.txt");

string line = stmRdr.ReadLine();
while(line != null) {
Console.WriteLine(line);
line = stmRdr.ReadLine();
}

2009年6月15日 星期一

好用的 MS SQL 2005 欄位字串加密應用 ( MD5 與 SHA1 )

MS SQL 2005 字串加密函式 -- HashBytes

HashBytes提供的加密法有幾種 (MD2、MD4、MD5、SHA、SHA1 ),但最常使用的還是 MD5 與 SHA1。而整個使用過程的感覺來說,基本上還算簡單~只是有一些"眉角"要注意。首先先測試 HashBytes 運作是否合乎需求:

select hashbytes('MD5','12345') as MD5,hashbytes('SHA1','12345') as SHA1