2014年3月6日 星期四

如何使用Robocopy複製檔案到一個需要使用新帳號登入的UNC路徑

Robocopy是Windows Server 高速同步備份、複製、移動大量檔案的好工具
有關Robocopy的功能詳細說明與介紹,可參閱下面文章:

Robocopy高速同步備份、複製、移動大量檔案

本文試著解決使用Robocopy複製檔案到UNC路徑時,需要登入不同的使用者帳號和密碼的問題。

備份Windows伺服器的資料到網路儲存設備時,輕便的決方案可以是:使用Windows工作排程器+Robocopy命令

處理步驟:
1、將Robocopy的指令寫成.bat檔,例如:
      robocopy 來源路徑(本機) 目的路徑 /e /xo /purge
     (相關參數功能請參閱 Robocopy高速同步備份、複製、移動大量檔案)

2、將此批次處理檔案加入工作排成器的啟動程式,並設定好相關排程,即可運作。


可能遭遇的問題:
當我想將檔案複製到一個需要使用新帳號登入的UNC路徑時,例如:
robocopy c:\windows \\192.168.1.1\home /e /xo /purge
上面的指令將無法正常被執行。

解決方案如下:
net use \\192.168.1.1\home /u:登入帳號 登入密碼
robocopy c:\windows \\192.168.1.1\home /e /xo /purge
net use \\192.168.1.1\home -D

※此功能只支援網域內的主機或IP位址

2014年2月28日 星期五

使用 OleDb Provider 如何在 SQL Server 存入完整的 DateTime?

一、問題描述:

使用OleDb Provider將日期時間資料存入SQL Server時,最常遇到的問題是:在Datetime資料型別下,只能存入日期,無法存日時間;因此存入的資料變成:2014/02/28 00.00.00

二、解決方案:

可以使用資料庫預設值,取得存入的時間。但是遇到資料修改後,需要自訂存入日期時間,此時又回到原來的困境;如何存檔呢?

一般使用存檔的語法如下:

OleDbParameter objectdate = new OleDbParameter("@objectdate", OleDbType.DBDate); objectdate.Value = DateTime.Now;
cmd.Parameters.Add(objectdate);

解決方法如下:

OleDbParameter objectdate = new OleDbParameter("@objectdate", OleDbType.DBTimeStamp); objectdate.Value = DateTime.Now.ToUniversalTime();
cmd.Parameters.Add(objectdate);

存入資料庫結果:2014/02/28 11:11:11.111
可以存入完整的日期與時間資料。


objectdate.Value = DateTime.Now.ToUniversalTime();
也可以使用自訂格式:
objectdate.Value =string.Format("{0:yyyy/MM/dd HH:mm:ss.fff}",DateTime.Now);
或是:
objectdate.Value =DateTime.NowToString();

2013年12月16日 星期一

Web config 字串加密 & Aspnet_regsql

aspnet_regiis -pe "connectionStrings" -prov "DataProtectionConfigurationProvider" -app "/MisConfig"
aspnet_regiis -pd "connectionStrings" -app "/MisConfig"
 
*"/MisConfig":網站名稱
 
ASP.NET SQL Server 註冊工具 (Aspnet_regsql.exe)
http://msdn.microsoft.com/zh-tw/library/ms229862%28v=vs.100%29.aspx


Start-->Run
-->regedit
-->HKEY_LOCAL_MACHINE
-->SYSTEM
-->CurrentControlSet
-->Services
-->aspnet_state
-->Parameters
AllowRemoteConnection=1

___________________________________________________________




aspnet_regsql -S localhost -E -ssadd 


aspnet_regsql -S localhost -E -ssadd -sstype p


aspnet_regsql -S localhost -E -ssadd -sstype c -d MyStateDB


 

有關ajaxToolkit:TabContainer 實作mouseover chang tab功能問題

網路上關於ajaxToolkit:TabContainer 實作mouseover 切換顯示內容程式碼如下:
function OnMouseover() {
        var tabContainer = $find("<%=TabContainer1.ClientID%>");
        var tabs = tabContainer.get_tabs();
        for (var i = 0; i < tabs.length; i++) {
            var tab = tabs[i];
            $addHandler(
                tab.get_headerTab(),
                'mouseover',
                Function.createDelegate(tab, function () {
                    tabContainer.set_activeTab(this);
                }
                ));
        }
    }
如果將此程式碼置放於asp.net user control時,使用下面的語法是無法正常運作的:
$(document).ready(function () {
        var tabContainer = $find("<%=TabContainer1.ClientID%>");
        var tabs = tabContainer.get_tabs();
        for (var i = 0; i < tabs.length; i++) {
            var tab = tabs[i];
            $addHandler(
                tab.get_headerTab(),
                'mouseover',
                Function.createDelegate(tab, function () {
                    tabContainer.set_activeTab(this);
                }
                ));
        }
    });

如果將程式碼更改如下,可以正常運作:
$(document).ready(function () {
        setTimeout('OnMouseover();', 500);
    });
    function OnMouseover() {
        var tabContainer = $find("<%=TabContainer1.ClientID%>");
        var tabs = tabContainer.get_tabs();
        for (var i = 0; i < tabs.length; i++) {
            var tab = tabs[i];
            $addHandler(
                tab.get_headerTab(),
                'mouseover',
                Function.createDelegate(tab, function () {
                    tabContainer.set_activeTab(this);
                }
                ));
        }
    }
以上說明,分享給有需要的網友。

   

2012年6月2日 星期六

ASP.NET event sequence in master page(重要資訊)

The following is the sequence in which events occur when a master page is merged with a content page:
  • Content page PreInit event.
  • Master page controls Init event.
  • Content controls Init event.
  • Master page Init event.
  • Content page Init event.
  • Content page Load event.
  • Master page Load event.
  • Master page controls Load event.
  • Content page controls Load event.
  • Content page PreRender event.
  • Master page PreRender event.
  • Master page controls PreRender event.
  • Content page controls PreRender event.
  • Master page controls Unload event.
  • Content page controls Unload event.
  • Master page Unload event.
  • Content page Unload event.
資料來源

網頁輸入頁面Enter鍵處理元件(KeyDownProcess Version:1.5)

##修正無法自動對焦的問題
##於asp.net detail view使用時,編輯區的元件須設定ID
function KeyDownProcess(e) {
    //-----------------------------------------------------------
    //網頁親和性輸入控制元件
    //元件功能:可以讓網頁資料的輸入更親切,功能如下:
    //1.按下Enter鍵自動找到下一個可輸入輸入元件
    //2.按下Enter鍵自動找尋submit按鍵,如果找到則模擬Click的功能
    //3.當輸入元件設定唯讀時,按下backspace鍵時,防止網頁轉址
    //4.支援無障礙導覽設定
    //5.支援Firefox、Google Chrome瀏覽器
    //版本:1.5(2012.06.02)
    //作者:科碩資訊有限公司
    //引用本元件,請保留作者和版本資訊
    //連絡mail:cursor@cursorinfo.com.tw
    //------------------------------------------------------------
    w3cEvent = e;
    var kv = 0;
    var rv = false;
    var isTextarea = false;
    var currentId = null; //目前元件
    var ex;
    var isAll = typeof (document.all) == "object";
    if (isAll) {
        ex = event;
        kv = ex.keyCode;
        isTextarea = (ex.srcElement.tagName == "TEXTAREA");
        currentId = ex.srcElement.id;
    }
    else {
        ex = e;
        kv = ex.which * 1;
        isTextarea = (ex.target == "[object HTMLTextAreaElement]");
        currentId = ex.target.id;
    }
    switch (kv) {
        case 13:
            if (isAll) {
                if (ex.srcElement.tagName == "A" || (ex.srcElement.tagName == "INPUT" && ex.srcElement.type == "BUTTON"))
                    return true;
            }
            if (currentId.length == 0)
                return false;
            if (isTextarea == true) {
                rv = isTextarea;
            }
            else {
                var cts = isAll ? document.all : document.getElementsByTagName('*');
                var cid = "";
                var queryBu = null;
                var beginNext = false; //開始比對是否為輸入元件
                var nextInput = null; //下一個輸入元件
                var specialSubmitId = "textQueryBU"; //指定特例的submit id
                var exceptionSubmitId = "waitting"; //指定例外的submit Id
                for (ii = 0; ii < cts.length; ii++) {
                    if (cts[ii].type == null || cts[ii].id == null)
                        continue;
                    if (cts[ii].id == currentId) {
                        beginNext = true;
                        continue;
                    }
                    if (beginNext == true && (cts[ii].id.indexOf(specialSubmitId) > -1 || ((cts[ii].type == "submit" || cts[ii].type == "image") && cts[ii].id.indexOf(exceptionSubmitId) == -1))) {
                        queryBu = cts[ii]; //找到submit元件
                        break;
                    }
                    else if (beginNext == true && (cts[ii].type == "text" || cts[ii].type == "textarea" || cts[ii].type == "password") && cts[ii].readOnly == false && cts[ii].style.display != "none") {
                        nextInput = cts[ii]; //找到下一個文字輸入元件
                        break;
                    }
                }
                if (null != queryBu) {
                    setTimeout("doClickId('" + queryBu.id + "');", 100);
                    rv = false;
                }
                else if (null != nextInput && nextInput.offsetWidth != 0) {
                    try {
                        nextInput.focus();
                    } catch (Error) { return true; }
                    rv = false;
                }
            }
            break;
        default:
            rv = true;
            break;
    }
    return rv;
}
//實做模擬Click的功能
function doClickId(source) {
    var o = document.getElementById(source);
    if (document.all && typeof (document.all) == "object") //IE
        o.click();
    else {
        if (document.createEvent) {
            var e = document.createEvent('MouseEvent');
            e.initEvent('click', true, false);
            o.dispatchEvent(e);
        } else {
            o.fireEvent('onclick');
        }
    }
}

2011年6月28日 星期二

網頁輸入頁面Enter鍵處理元件(KeyDownProcess Version:1.4)

function KeyDownProcess(e) {
//-----------------------------------------------------------
//網頁親和性輸入控制元件
//元件功能:可以讓網頁資料的輸入更親切,功能如下:
//1.按下Enter鍵自動找到下一個可輸入輸入元件
//2.按下Enter鍵自動找尋submit按鍵,如果找到則模擬Click的功能
//3.當輸入元件設定唯讀時,按下backspace鍵時,防止網頁轉址
//4.支援無障礙導覽設定
//5.支援Firefox、Google Chrome瀏覽器
//版本:1.4(2011.06.28)
//作者:科碩資訊有限公司
//引用本元件,請保留作者和版本資訊
//連絡mail:cursor@cursorinfo.com.tw
//------------------------------------------------------------
var kv = 0;
var rv = false;
var isTextarea = false;
var currentId = null; //目前元件
var ex;
var isAll = typeof (document.all) == "object";
if (isAll) {
ex = event;
kv = ex.keyCode;
isTextarea = (ex.srcElement.tagName == "TEXTAREA");
currentId = ex.srcElement.id;
}
else {
ex = e;
kv = ex.which * 1;
isTextarea = (ex.target == "[object HTMLTextAreaElement]");
currentId = ex.target.id;
}
switch (kv) {
case 8:
if (currentId.length == 0)
return false;
return !document.getElementById(currentId).readOnly;
case 13:
if (isAll) {
if (ex.srcElement.tagName == "A" || (ex.srcElement.tagName == "INPUT" && ex.srcElement.type == "BUTTON"))
return true;
}
if (currentId.length == 0)
return false;
if (isTextarea == true) {
rv = isTextarea;
}
else {
var cts = isAll ? document.all : document.getElementsByTagName('*');
var cid = "";
var queryBu = null;
var beginNext = false; //開始比對是否為輸入元件
var nextInput = null; //下一個輸入元件
var specialSubmitId = "textQueryBU"; //指定特例的submit id
var exceptionSubmitId = "waitting"; //指定例外的submit Id
for (ii = 0; ii < cts.length; ii++) {
if (cts[ii].type == null || cts[ii].id == null)
continue;

if (cts[ii].id == currentId) {
beginNext = true;
continue;
}
if (beginNext == true && (cts[ii].id.indexOf(specialSubmitId) > -1 || ((cts[ii].type == "submit" || cts[ii].type == "image") && cts[ii].id.indexOf(exceptionSubmitId) == -1))) {
queryBu = cts[ii]; //找到submit元件
break;
}
else if (beginNext == true && (cts[ii].type == "text" || cts[ii].type == "textarea" || cts[ii].type == "password") && cts[ii].readOnly == false && cts[ii].style.display != "none") {
nextInput = cts[ii]; //找到下一個文字輸入元件
break;
}
}
if (null != queryBu) {
setTimeout("doClickId('" + queryBu.id + "');", 100);
rv = false;
}
else if (null != nextInput) {
try {
nextInput.focus();
} catch (Error) { return true; }
rv = false;
}
}
break;
default:
rv = true;
break;
}
return rv;
}
//實做模擬Click的功能
function doClickId(source) {
var o = document.getElementById(source);
if (document.all && typeof (document.all) == "object") //IE
o.click();
else {
var e = document.createEvent('mouseEvent');
e.initEvent('click', true, true);
o.dispatchEvent(e);
}
}