2009年5月27日 星期三

去除圖片藍框即在URL加上ICON

只要在 style 加上 border="0" 或 border:0px 就可以將圖片加有聯結的藍色框線去除掉喔
<a href="http://www.52bj.com" hideFocus=true><img src="http://www.52bj.com/bbs/images/bbtitle.gif" width="120" height="50" border="0">

另外剛剛逛痞客幫後台的時候,在"帳戶管理"底下的"網域設定"發現有一個功能,可以上傳自己製作的icon,成為自己網址前的小圖示,我一直想在自己的網誌前面有小韋頭,為大家蒐集幾個好用的線上軟體製作:

如果要用軟體製作可以使用 IconCool Editor、IconsExtract、Aha-soft ArtIcons 這類的軟體來製作

另外省時間一點可以線上製作,下面幾個網站都可以做到,現在pixnet可以支援上傳ico耶,讓我來試試看,我是使用http://www.rw-designer.com/online_icon_maker.php

點選瀏覽,選照片然後按下go就可以把照片放到網路上,可以再加上自己繪圖,最後按下右上方的Download Icon,就可以幫你存成放置於網址前的ico檔案了

Favicon.cc,可以自己畫,還可以馬上預覽
Online Icon Maker,可以自己畫或是上傳圖片,還有透明效果,也有備用圖庫讓你用
FavIcon from Pics,可以上傳圖片的方式製作,上傳完有預覽,還有動畫效果
Favicon Generator,可以自己畫或是上傳圖片,也有透明效果
如果你希望網頁可以在網址前面有個小圖案,可以在網頁的原始碼<head></head> 中間加上

<link rel="shortcut icon" href="favicon.ico" >

2009年5月24日 星期日

Gridview編輯取值的問題

一、我以一個簡單的範例來回答您,關於您提到沒有辦法抓到值,由於您抓的是Label,但是label在編輯狀態下沒有出現,所以抓不到值,正確的抓法為Ctype(GridView1.Rows(index).cell(cellindex).control(0),TextBox).Text。

Protected Sub GridView1_RowEditing(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewEditEventArgs) Handles GridView1.RowEditing
Dim editIndex As Integer = GridView1.EditIndex
End Sub

Protected Sub GridView1_RowUpdated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdatedEventArgs) Handles GridView1.RowUpdated
Dim editIndex As Integer = GridView1.EditIndex
Response.Write(GridView1.Rows(editIndex).Cells(4).Text) '這是抓cell裡面的Label(即是非編輯狀態下的Label,抓不到值)
Response.Write(CType(GridView1.Rows(editIndex).Cells(4).Controls(0), TextBox).Text) '這是抓cell裡面的TextBox(即是編輯狀態下的TextBox,抓的到值)
End Sub

Protected Sub GridView1_RowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles GridView1.RowUpdating
Dim editIndex As Integer = GridView1.EditIndex
Response.Write(GridView1.Rows(editIndex).Cells(4).Text)'這是抓cell裡面的Label(即是非編輯狀態下的Label,抓不到值)
Response.Write(CType(GridView1.Rows(editIndex).Cells(4).Controls(0), TextBox).Text)'這是抓cell裡面的TextBox(即是編輯狀態下的TextBox,抓的到值)

End Sub

二、要判斷哪一筆被編輯,可以使用GridView1.EditIndex

********************************************************************************
抓取某欄位更新的值或更新前的值可以使用
在RowUpdated屬性中使用
string a = e.NewValues[0].ToString(); //更新的值
string a = e.OldValues[0].ToString(); //更新前的值

2009年5月20日 星期三

利用QueryString傳遞中文字參數時,接收頁程式收到的是亂碼

一般在兩個頁面ASPX之間想要傳遞參數,利用QueryString是最普遍的作法,如果傳遞的參數是英文或數字都沒有問題(main.aspx?description=ABC123),可是如果傳的是帶有中文字的參數時(main.aspx?description=測試),URL上的顯示一切正常,但在SERVER端接收參數時,收下的卻可能是亂碼(測??)。

您試試看用 Server.UrlEncode

//2.在接收傳值的網頁的Page_Load
Dpt = HttpUtility.UrlDecode(Request.QueryString["Dpt"].ToString(),System.Text.Encoding.UTF8);
Server.UrlEncode();

網頁1寫
Response.Redirect("WebForm2.aspx?id=" + Server.UrlEncode("中文"));

網頁2的Page_Load寫
Label4.Text = Request.QueryString["id"];

2009年5月18日 星期一

基本的座標查詢

很多人裝好Google Earth應該都會先手賤的輸入「Taipei」等中文地名查詢,記得以前還查不到任何地點咧,現在也好不到哪裡去,除了英文地名沒有人記得住之外,照表 輸入還是有很多查不到的。我們只是先熟悉一下搜尋框的使用方法,稍後再搭配其他地圖服務一起加強搜尋。

輸入關鍵字之後,地圖畫面會以動畫飛向定點,最後畫面的中央會定位在找到的地標,搜尋框下也會出現並勾選符合的項目。地圖上也會有相同的瞄準鏡圖示,下方顯示的經緯度也會即時跟著變動。

由於搜尋結果在正中央,可以縮放地圖以便觀察周遭的影像,中心點是不會變的。 除了輸入關鍵字,Google Earth也可以直接以經緯度查詢地圖,經緯度有幾種常見的標示法(詳見「關鍵字」的解釋),在搜尋框裡頭也可以通用,底下我們先把地圖上標示的經緯度變更為十進位,這樣就可以和後面一些網路服務的標示單位統一了。
------------------------------------------------------------------------
@關鍵字:經緯度緯 度(Latitude),經度(Longitude)是用來標訂地球上座標的假想線。經緯度牽涉到的領域及知識很廣泛,我們僅就所知的部份概略解說。假設 從水平的赤道,及垂直的本初子午線將地球一分為四,赤道以上為北緯線,下方是南緯,分別是從0度到90度;

同樣的,本初子午線右方是東經,左邊則有西經 線,單位是0到180度。 經緯度有幾種常見的標示方法,例如25。1’12.00”N代表北緯25度1分12秒,依此類推,分和秒是比度更小的角度單位,為60進 位,而秒數的小數點則是用來呈現更精細的刻度。在本篇文章套用的軟體,大多是換算成十進位輸入,東、西經,北、南緯則是用正、負符號來區別。

目前 Google Earth和各種GPS接收器都使用最新的WGS 84座標系統,除了傳統的假想線分割,也會根據實際情況修正座標,比方經度的起點並不在傳統本初子午線的格林威治。補充說明,台灣地圖是採用另一種「二分 帶」座標系統,兩者之間必須透過複雜的公式轉換。
------------------------------------------------------------------------
參考別人上傳的地標 Google Earth對中文世界的支援實在是很匱乏,還好在laXXXXXyers面板底下可以打開「Google Earth Community」顯示層,裡頭有不少熱心網友替台灣各個地方加入的地標。其他面板的使用方式也大同小異,不同性質的地標在地圖裡會顯示成不同的圖示, 甚至有地震帶、火山等等觀測資訊,不過一般人比較實用的還是Community的「i」圖示,在樹狀目錄下的「Community Showcase」也有其他不同的地標類型圖示。 有了現成的地標,就比較容易辨認、搜尋鄰近的地圖了。

不過解析度拉遠一點,一堆「i」圖示擠在一起也蠻噁心的,除了取消勾選資料夾底下的細項之外,也可以 把比較實用的地標直接保存到個人資料夾「My Places」,這有點像是書籤的作用,也可以區分成不同資料夾分類,後面我們自行標示的景點同樣也可以保存在這裡。隨著勾選、取消勾選就可以切換顯示一 個或一組不同的地標。

搭配UrMap查詢座標 UrMap:http://www.urmap.com/ Greasemonkey:http://greasemonkey.mozdev.org/ UrMap Plus:http://flickr.tw/2005/12/_urmap_geotagged_flickr_photos.html

比起來另一套國人出品的UrMap,只有台灣地區的地圖,但是中文的搜尋效率和結果當然就好太多了。只是UrMap和Google Maps一樣,在網頁上直接互動執行,而不像Google Earth是安裝到電腦的軟體,畫面自然遜色了些。由於我們的計畫是替數位照片加入座標資訊,然而UrMap的搜尋結果卻是沒有座標的,比較笨的方法就是 兩個軟體都打開,然後把UrMap的顯示模式切換到「衛星影像」或「衛星地圖」,用UrMap的搜尋結果比對到Google Earth裡的經緯度座標。

還好有另一位強者網友製作了「UrMap Plus」User javascXXXXXript(UserJS),簡單的解釋一下,UserJS是瀏覽器外掛的小程式,能夠強制修改網頁的呈現方式和功能。我們是以Firefox 實作,必須先安裝Greasmonkey擴充套件做為UserJS執行的平台,再裝上UrMap Plus,再次連上UrMap會發現加入了經緯度顯示的功能(以地圖中心點為準),還多了「Google Earth」、「Google Maps」的按鈕,按一下就可以把兩種地圖疊上去,實在是太強了。

如何將大量的.eml檔匯入至Outlook express

先開啟 Outlook Express,接著到檔案總管選取要匯入的 eml 檔案直接用拖曳的方式拉到 Outlook Express 中的資料夾即可。

若有其他好的方法歡迎大家提供喔

Null / DBNull / String.Empty 差異

Null跟DBNull及String.Empty這三者,或許很少有人認真的去想過這三者的差異在那,而什麼時候要用那一個去判斷?

從簡單的if去比對這三者是否相等,很快的就發現這三者是不相等的.

null != DBNull /DBNull != string.Empty / null != string.Empty

那麼現在宣告了兩個變數,一個是string a="",另一個是string b=null; 那麼這兩個變數是各自符合那一種?

結果是

a != null;

a != DBNull

a = string.Empty

拿.Net 2.0才有的新判斷string.IsNullOrEmpty來看.也是為true

而b的部份則如下

b = null

b != dbnull

b != string.Empty

string.IsNullOrEmpty(b) = true

從這兩個例子看到什麼時候是Null,什麼時候是string.Empty,那麼DBNull呢?

DBNull的使用時機,當至資料庫查詢,符合的資料回傳的資料欄位沒有值,為null時,此時此欄位的值就=DBNull.

當至資料庫查詢,沒有符合的資料回傳時,此時回傳的結果就=Null.

Null是當物件未被初始化時的情況,例如 StreamReader reader;還沒有給new StreamReader();

ex :
object o=cmd.ExecuteScalar();(回傳一個欄位的值)
狀況1:當DB回傳有符合的資料,但該欄位沒有值時.o = DBNull 可是 o != null
狀況2:當DB回傳沒有符合的資料時, o = null可是o != DBNull
狀況3:不論是狀況1或狀況2的結果,Convert.ToString(o)=string.Empty;

使用MD5將字串加密 C# VS2005 Sample Code

MD5的加密已經出來很長一段時間了,也不是什麼特別的新技術,寫這篇的用意也有點像是給自己的一個Note,畢竟加密的功能不常用,最多寫成一個Class,未來去呼叫就好,怕自己也會忘記,所以把這個寫下來.
  
執行是單純加密,而Salt執行則是跑Salted Hash的動作.

單純加密比較不好,如果被人猜到加密方法是採MD5,也沒有Salted,那會風險會高一點,而Salt的效果,因為多了一個Value去加密,除了前面的都要猜到外,還要知道Salted Value才可以.而Salted Value就看大家要怎麼去設了,這裡也只是單純的Demo.

單純加密的部份,其實很簡單,程式碼如下 :

byte[] Original = Encoding.Default.GetBytes(txt_Source.Text); //將字串來源轉為Byte[]
MD5 s1 = MD5.Create(); //使用MD5
byte[] Change = s1.ComputeHash(Original);//進行加密
txt_Result.Text = Convert.ToBase64String(Change);//將加密後的字串從byte[]轉回string
很簡短的四行,就可以達成了,但個人還是喜歡用Salted,畢竟要加密,就要降低風險.而這方法加密後的結果如下 :

值 : 123456789
結果 : JfnnlDI7RTiF9RgfG2JNCw==

Salted Hash就比較複雜了一點 :
string salted = txt_Salt.Text.Trim(); //宣告變數,儲存Salted值
if (salted.Length == 0)//如果使用者沒給Salt值,那給預設
...{
salted = "t15t";
}
byte[] Original = Encoding.Default.GetBytes(txt_Source.Text);//將來源字串轉為byte[]
byte[] SaltValue = Encoding.Default.GetBytes(salted);//將Salted Value轉為byte[]
byte[] ToSalt = new byte[Original.Length + SaltValue.Length]; //宣告新的byte[]來儲存加密後的值
Original.CopyTo(ToSalt, 0);//將來源字串複製到新byte[]
SaltValue.CopyTo(ToSalt, Original.Length);//將Salted Value複製到新byte[]
MD5 st = MD5.Create();//使用MD5
byte[] SaltPWD = st.ComputeHash(ToSalt);//進行加密
byte[] PWD = new byte[SaltPWD.Length + SaltValue.Length];//宣告新byte[]儲存加密及Salted的值
SaltPWD.CopyTo(PWD, 0);//將加密後的值複製到新byte[]
SaltValue.CopyTo(PWD, ToSalt.Length);//將Salted Value複製到新byte[]
txt_Result.Text = Convert.ToBase64String(PWD);//顯示Salted Hash後的字串
那個byte[]要放那個,那個byte[]要做什麼,很容易一不注意,就放錯個進去. 但這個加密後的如果如下:

值 : 123456789
Salted Value : goTest
結果 : erxXv9V5RYeCJaiF1z3yZ29UZXN0AA==

 因為這是目前仍無法反解回來的加密方式,所以就算DataBase的資料外流,也不用怕這些資料會被還原回來,而Salted Value就看大家要怎麼去"動"它囉.

如何將經緯度利用Google Map API顯示 C# VS2005 Sample Code

當我們知道住址時,也可以這樣套用
http://maps.google.com/maps?q=台北縣中和市莒光路

當我們知道經緯度後,只要將數據套到以下網址即可.

http://maps.google.com/maps?q=25.048346%2c121.516396

在參數q=後面,就可以加上經緯度了.
25.048346是Latitude緯度
%2c是空格
121.516396就是Longitude經度了.


而另一種做法就比這個複雜一點,要使用Google API來做,首先,要使用google API就必需要有google的帳號,沒帳號是無法申請的,當有google的帳號後,就可以到http://code.google.com/apis/maps/signup.html開始申請了.


最下方My web site URL就輸入各位的URL囉,如果輸入的與執行google map api的URL不同,那就無法執行了.所以這個URL務必輸入正確, 輸入正確的URL並將上方的CheckBox打勾後,就可以按Generate API Key了,如果已經登入GOOGLE的,就不會再跳登入畫面,之後就會跳到另一個畫面,上面就有Key及Example Code了,當有了這些,就可以開始自己寫Code了.

基本上,因為主要是Demo用的,所以設計介面很簡單.
上面就一個DropDownList,因為先前的範例資料的關係,先手動在ITEM上加上1跟2.
而下方的地圖,就跟申請API時的Example Code一樣. 原始碼如下 :

< %@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

< !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

< html xmlns="http://www.w3.org/1999/xhtml" >
< head runat="server">
< title>GPS 位置地圖< /title>
< script src="http://maps.google.com/maps?file=api&v=2&key=輸入你的Key"
type="text/javascript">< /script>

< script src="http://www.google.com/uds/api?file=uds.js&v=1.0&key=輸入你的Key"
type="text/javascript">< /script>

< script src="http://www.google.com/uds/solutions/localsearch/gmlocalsearch.js" type="text/javascript">< /script>

< style type="text/css"> @import url("http://www.google.com/uds/css/gsearch.css");
@import url("http://www.google.com/uds/solutions/localsearch/gmlocalsearch.css");
< /style>

< script type="text/javascript">
//< ![CDATA[
function load(x,y,LocationName) {
if (GBrowserIsCompatible()) {
var map = new GMap2(document.getElementById("map"));
var point = new GLatLng(x,y);
map.setCenter(point, 16);
map.addOverlay(new GMarker(point));
map.addControl(new GLargeMapControl());
map.addControl(new GMapTypeControl());
map.addControl(new GScaleControl());
var lsc = new google.maps.LocalSearch();
map.addControl(new google.maps.LocalSearch() , new GControlPosition(G_ANCHOR_BOTTOM_RIGHT, new GSize(10,20)));
map.openInfoWindowHtml (map.getCenter(), LocationName);
}
}
//]]>
< /script>
< /head>
< body id="MainBody" runat="server">
< form id="form1" runat="server">
< div>
< asp:DropDownList ID="ddl_Location" runat="server" AutoPostBack="True" OnSelectedIndexChanged="ddl_Location_SelectedIndexChanged"
Width="500px">
< asp:ListItem>1< /asp:ListItem>
< asp:ListItem Value="2">2< /asp:ListItem>
< /asp:DropDownList>< br />
< br />
< div id="map" style="width: 500px; height: 400px">
< /div>

< /div>
< /form>
< /body>
< /html>

只要將"輸入你的Key"的地方置換為你在Google MAP API申請到的Key即可.

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (Request.QueryString.HasKeys())
{
string longitude = Request.QueryString.Get("lon");
string latitude = Request.QueryString.Get("lat");
string LN = Request.QueryString.Get(Server.UrlDecode("LN"));
this.MainBody.Attributes.Add("onload", "load(" + longitude + "," + latitude + ",'" + LN + "')");
}
else
{
DataTable dt = GetLocation(ddl_Location.SelectedValue);
if (dt.Rows.Count > 0)
{
DataRow dr = dt.Rows[0];
this.MainBody.Attributes.Add("onload", "load(" + dr["Latitude"].ToString() + "," + dr["Longitude"].ToString() + ",'" + dr["updtime"].ToString() + "')");
}
}
}
}

protected void ddl_Location_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
DataTable dt = GetLocation(ddl_Location.SelectedValue);
if (dt.Rows.Count > 0)
{
DataRow dr = dt.Rows[0];
this.MainBody.Attributes.Add("onload", "load(" + dr["Latitude"].ToString() + "," + dr["Longitude"].ToString() + ",'" + dr["updtime"].ToString() + "')");
}
}
catch (Exception ex)
{
Response.Write(ex.Message);
}


}

private DataTable GetLocation(string UID)
{
try
{
string strconn = "Data Source=localhost;Initial Catalog=GPSDB;User Id=GPSUser;Password=gpsuser;";
SqlConnection conn = new SqlConnection(strconn);
string strcmd = "select Latitude,Longitude,UpdTime from GPSDB..gpstrace where UID=@UID";
SqlCommand cmd = new SqlCommand(strcmd, conn);
cmd.Parameters.AddWithValue("@UID", UID);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt=new DataTable();
da.Fill(dt);
return dt;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}

如此一來,就大功告成了,但或許有些人會有些遺問,那麼MAP上,可以自訂一些東西,例如不給搜尋列,這都是可以做到的,可以參考Google Map API Examples,這裡就有很多詳細的說明.

感覺起來,GPS定位的想法部份,好像到此就沒了,但在這過程中也發現到,其實Google Map有出Mobile版的,而它的定位可不只是局限在GPS衛星訊號,而是可以用手機的訊號去定位,也就是說,他是透過手機與基地台之間的傳輸來計算出所在位置,這樣就可以不受到手機沒有GPS功能模組或收不到衛星訊號所限制,這個概念其實也不算新,記得幾年前的Run!PC雜誌上就有篇文章是在介紹這個的,採用的技術是Java.

不過不管如何,可以預見的是,這個的應用會愈來愈多元,誰說未來還要自己去用電腦下載圖資再更新到自己的GPS裝置上,裝置上的地圖永遠會是最新的,加上Street View,也不用去看那電腦畫出來的3D的道路圖了,或許3G或無線上網的普及,這些運用將會更廣泛.

Google Maps 常用參數說明及相關製作文件介紹

在地圖上您可套用以下任何內置控制件:
map.addControl(new GSmallMapControl()); //加入地圖縮放工具,無拉桿(擇一使用)
map.addControl(new GLargeMapControl()); //加入地圖縮放工具,有拉桿(擇一使用)
map.addControl(new GScaleControl()); //加上比例尺
map.addControl(new GMapTypeControl()); //加入地圖切換類型
map.addControl(new GOverviewMapControl()); //位於又下角可折疊縮略圖
map.setCenter(new GLatLng(25.001689, 121.460809), 8); //設定台灣經度,緯度
map.addControl(new google.maps.LocalSearch()); //加入搜尋功能
map.addMapType(G_NORMAL_MAP); //加入一般道路圖(預設)
map.addMapType(G_SATELLITE_MAP); //加入衛星空照圖
map.addMapType(G_PHYSICAL_MAP); //加入地形圖
map.addMapType(G_HYBRID_MAP); //混合地形圖

Google Maps API 內建四種控制項:
1. GLargeMapControl : 適合給大型地圖的控制項。
2. GSmallMapControl : 適合給小型地圖的控制項。
3. GSmallZoomControl : 只有 Zoom Level 的調整,沒有地圖移動控制。
4. GMapTypeControl : 顯示地圖型態切換的控制項。

設置按鈕 CSS 元素。
TextualZoomControl.prototype.setButtonStyle_ = function(button) {
button.style.textDecoration = "underline";
button.style.color = "#0000cc";
button.style.backgroundColor = "white";
button.style.font = "small Arial";
button.style.border = "1px solid black";
button.style.padding = "2px";
button.style.marginBottom = "3px";
button.style.textAlign = "center";
button.style.width = "6em";
button.style.cursor = "pointer";
}

http://www.webpage.idv.tw/maillist/maillist3/skill/09/09.htm

Visual C# 新增使用 Session.Add 方法

string firstName = "Jeff";
string lastName = "Smith";
string city = "Seattle";

Session.Add("First", firstName);
Session.Add("Last", lastName);
Session.Add("City", city);

啟動新的 ASP.NET 應用程式,然後將程式碼貼至 Page_Load 方法。

2009年5月17日 星期日

適用於 MS SQL 2005 的災難復原程序

使用 MS SQL 2000 的朋友,在升級到 MS SQL 2005 之後,都會發現按照以往的災難復原程序,都無法順利的啟動 MS SQL 單一模式,因此也就無法順利的復原 Master 資料庫,後面的一堆步驟也玩不下去了....

整個問題的原因,並不是 CA Protection Suites / BrightStor ARCserve Backup 不支援 MS SQL 2005,而是偉大的 Microsoft 自己改了 MS SQL 災難復原的遊戲方式,因此,各位朋友們又有功課要練習了....

如今 MS SQL 2005 不像是早先的 MS SQL 2000,可以在 master 資料庫不存在的情況下,透過單一模式來啟動 SQL Service 並還原master資料庫。MS SQL 2005 必須藉由原始安裝 MS SQL Server 2005 的 DVD 光碟片,以類似重裝 MS SQL 2005 的方式重新產生新的 master 資料庫實體,且在整個過程中,安裝光碟也會重新建立資源資料庫的相關檔案與設定。(如果後來接手的管理員,不曉得原先的設定參數,這時候就可能因為錯誤參數造成 SQL 的最佳化設定值跑掉了....)

按照微軟的步驟,整個災難復原程序都會變得很複雜,而且失敗率又高,有興趣的朋友可以參看後面所提「微軟的 MS SQL 2005 災難復原」步驟。
小弟比較 CA SQL Agent 在 MS SQL2000/2005 的備份機制,整理出新的災難復原步驟,這個方式提供更容易的備份與還原,而且成功率相當高喔!

「布萊德雷的 SQL 2005 + CA BAB 災難復原方法」
由於 SQL Agent 僅備份資料庫的「內容」,並不備份資料庫的「檔案」,因此,我們只要在離線模式下將 SQL 2005 的檔案進行備份即可。由於已經取得了核心的資料庫實體檔案,因此這樣的備份動作只需要一次即可(當然,如果可以多備份幾份,也可降低因儲存媒體遺失、損害所帶來的困擾)。

備份做法:

停止 MS SQL 2005 服務。
透過 CA Windows Client Agent 備份 SQL 資料庫目錄內的 master.mdf、mastlog.ldf、model.mdf、modellog.ldf 四個檔案。(或者直接勾選整個 SQL Server 資料夾進行備份)
啟動 MS SQL 2005 服務。

災難復原時:

透過 CA Windows Client Agent 還原 SQL 資料庫目錄內的 master.mdf、mastlog.ldf、model.mdf、modellog.ldf 四個檔案。(或者直接勾選整個 SQL Server 資料夾進行備份)
啟動 MS SQL 2005 單一模式服務,將資料回復至最新的紀錄。

進入單一模式服務的方式:
1.先停止 MSSQL Server 服務
2.並在啟動參數中加上 -m 參數後
3.再啟動 MS SQL Server 服務

如何,整個動作是不是簡單多了?但如果平常沒有做上述的備份動作,你就只能採用以下的災難復原方法囉!

「微軟的 MS SQL 2005 災難復原方法」
本方法適用於當災難發生時,且平時並未透過「布萊德雷的 SQL 2005 + CA BAB 災難復原方法」進行核心檔案的備份,此時將得拿出微軟原始安裝 MS SQL Server 2005 的 DVD 光碟片,參照以下的安裝參數,以透過類似重裝 MS SQL 2005 的方式重新產生新的 master 資料庫實體,並重新建立資源資料庫的相關檔案與設定。(可能造成最佳化設定值遺失的風險)

開啟 MS DOS 視窗下,執行以下參數來重建 Master 資料庫
(假設光碟機代碼為 D:\ )
D:\SQL Server x86\Servers> setup.exe /qb INSTANCENAME=MSSQLSERVER REINSTALL=SQL_Engine REBUILDDATABASE=1 SAPWD=P@ssw0rd SQLCOLLATION=CHINESE_TAIWAN_STROKE_CI_AS

以下就是重新建立master資料庫的參數說明(對照顏色區塊可方便閱讀):
D:\SQL Server x86\Servers => 為安裝檔案路徑。
/qb => 安裝過程中會顯示重要對話方塊與錯誤訊息的顯示,不可與 /qn 參數混用。
/qn => 安裝過程中不顯示對話視窗,不可與 /qb 參數混用。
INSTANCENAME => 若是預設執行個體,則後面的名稱就是=MSSQLSERVER,也可以自行指定命名新的執行個體名稱。
REINSTALL => 指定要重新安裝對象就是資料庫引擎。
REBUILDDATABASE=1 => 表示進行重建 master資料庫。
SAPWD => 指定使用混合模式驗證時,SQL 的 sa 密碼。
SQLCOLLATION => 設定SQL Server 執行個體定序。

執行的過程會檢查系統安裝的檔案是否足夠、設定資料庫引擎元件,過程中也會覆寫系統資料庫,最後就會重新產生新的master 資料庫檔案,此時我們再進入單一模式服務,透過 CA SQL Agent 來還原master 資料庫內容。

2009年5月14日 星期四

數字轉字串(number to string) 字串轉數字(string to number)

字串轉數值語法為:
int n = int.Parse(str);

ex:
int n= int.Parse("1000");
執行結果>>>> n = 1000

由資料庫抓值後轉數值
int n=int.Parse(row1["PJGOVBUDGET"].ToString());

資料庫抓出來的資料有時為null或空白...執行語法會出錯....
有另一種方法可轉值,語法為:
int n;
int.TryParse(str,out n);

ex:
int n;
int.TryParse(row1["PJGOVBUDGET"].ToString(),out n);

正確來說是 整數轉字串 字串轉整數
integer to string and string to integer
char *itoa(int value, char *buffer, int radix);
http://www.cplusplus.com/reference/clibrary/cstdlib/itoa.html

int atoi ( const char * str );
http://www.cplusplus.com/reference/clibrary/cstdlib/atoi.html

Outlook Express 中開啟電子郵件時,影像或URL連結遭到封鎖

解決方法
1.按一下 [開始],指向 [程式集],再按一下 [Outlook Express]。
2.在 [工具] 功能表上,按一下 [選項],再按一下 [安全性] 索引標籤。
3.按一下以清除 [阻擋 HTML 電子郵件中的圖片和其他外部內容] 核取方塊。
4.按一下 [套用],然後按一下 [確定]。

另外檢查一下電腦預設使用的瀏覽器是否有設定好
這樣就可以解決問題瞜

Google Maps API 輸入地址轉經緯度,並產生地圖程式分享

Google Maps API 輸入地址轉經緯度,並產生地圖程式分享!!
這幾天小小研究了Google Maps API的程式...
因為我們要把My-Life旅遊登錄的商家,都自動產生個地圖頁並附上經緯度,

這樣就能夠讓遊客很容易的就知道商家的位置,
有GPS的遊客也很容易的就找到商家的經緯度,可以做定位!

因為在找相關資料時,文章非常少,也沒什麼地方討論!!
特別發這帖,希望需要的朋友能參考及交流!!

首先要寫Google Maps API必須要先擁有API KEY
你能夠到以下網址申請
http://code.google.com/apis/maps/signup.html
(一個網址需要申請一個API KEY)

申請完後你能在這個頁面找到些範例程式
http://code.google.com/apis/maps/documentation/examples/index.html
像最簡易的頁面
http://code.google.com/apis/maps/documentation/examples/event-simple.html
多了控制項的頁面
http://code.google.com/apis/maps/documentation/examples/control-simple.html
輸入地址轉座標的頁面
http://code.google.com/apis/maps/documentation/examples/geocoding-simple.html

http://www.my-life.tw/hosting-talk/thread-418-1-1.html

利用 Google Maps 查詢地址經緯度 - Geocoding via HTTP 簡易範例

使用 WebClient 類別:

1: // Taipei 101
2: string address = "台北市信義路五段七號101樓";
3:
4: // 查詢經緯度
5: string output = "csv";
6: string key = "ABQIAAAAXDq__hWKi9eMCwnn7LrMCxT2yXp_ZAY8_ufC3CFXhHIE1NvwkxSnSVp_Xlsd4Ph5iyMua7PE5E0x_A";
7: string url = string.Format("http://maps.google.com/maps/geo?q={0}&output={1}&key={2}", address, output, key);
8:
9: WebClient wc = new WebClient();
10:
11: // 讀取結果
12: Stream s = wc.OpenRead(url);
13: StreamReader sr = new StreamReader(s, Encoding.UTF8);
14: string result = sr.ReadToEnd();
15:
16: // 解析 200,8,25.033408,121.564099 (HTTP status code, accuracy, latitude, longitude)
17: string[] tmpArray = result.Split(',');
18: string latitude = tmpArray[2];
19: string longitude = tmpArray[3];
20:
21: MessageBox.Show(string.Format("緯度: {0}, 經度: {1}", latitude, longitude), address,
22: MessageBoxButtons.OK, MessageBoxIcon.Information);使用 HttpWebRequest、

HttpWebResponse 類別:

1: // Taipei 101
2: string address = "台北市信義路五段七號101樓";
3:
4: // 查詢經緯度
5: string output = "csv";
6: string key = "ABQIAAAAXDq__hWKi9eMCwnn7LrMCxT2yXp_ZAY8_ufC3CFXhHIE1NvwkxSnSVp_Xlsd4Ph5iyMua7PE5E0x_A";
7: string url = string.Format("http://maps.google.com/maps/geo?q={0}&output={1}&key={2}", address, output, key);
8:
9: // 送出要求
10: HttpWebRequest request = (HttpWebRequest) WebRequest.Create(url);
11:
12: // 取得回應
13: HttpWebResponse response = (HttpWebResponse) request.GetResponse();
14:
15: // 讀取結果
16: StreamReader sr = new StreamReader(response.GetResponseStream());
17:
18: // 解析 200,8,25.033408,121.564099 (HTTP status code, accuracy, latitude, longitude)
19: string[] tmpArray = sr.ReadToEnd().Split(',');
20: string latitude = tmpArray[2];
21: string longitude = tmpArray[3];
22:
23: MessageBox.Show(string.Format("緯度: {0}, 經度: {1}", latitude, longitude), address,
24: MessageBoxButtons.OK, MessageBoxIcon.Information);

http://www.dotblogs.com.tw/chhuang/archive/2008/04/03/2593.aspx

Google Map 的中文製作簡介
http://dev.leck.com/gsupport/

2009年5月11日 星期一

iframe 使用及設定

在一個活動企劃,我想將每次活動會使用到的功能做成模組,透過模組的參數去控制每個模組要顯示的內容,然後在HTML頁面上透過 iframe 將模組崁入網頁中

選擇欲插入iframe的位置,切換至【顯示程式碼檢視】
貼上iframe標籤, 如
<iframe name="mainFrame" frameborder="0" width="700" height="300" class="iframe-style" src="http://www.fg.tp.edu.tw" > </iframe>

製作並套用CSS樣式, 如:
<style type="text/css" >
<!--
.iframe-style {
border: thin dashed #666666;
width: 700px;
height: 300px;
}
-->
</style>

常用屬性
name: 設定頁框名稱 (也就是連結的目標名稱)
frameborder: 設定框線粗細
class: 指定CSS樣式
src="要顯示網頁的URL"
width="450" 內置框架的高
height="200" 內置框架的寬
scrolling="yes" 有沒有捲軸(yes 或 no)
frameborder="o" 邊框,預設為有,0為無邊
allowtransparency="true" 透明

參考相關屬性網址
http://big5.ce.cn/gate/big5/blog.ce.cn/html/33/100933-17700.html