2009年6月1日 星期一

常用google 工具

google webmaster tools https://www.google.com/webmasters/tools/dashboard
google analytics https://www.google.com/analytics/settings/?et=reset&hl=zh-TW
google adsense http://www.google.com/adsense/?hl=zh-TW
google code http://code.google.com/

2009年5月31日 星期日

Blogger 標籤/搜尋頁面只列出標題

參考: http://abintech.azhai.org/2007/03/simply-result-of-label-and-search.html

1. html編輯 -> 展開小裝置
2. 搜尋程式碼


<b:loop var="post" values="data:posts">
<b:if cond="data:post.dateHeader">
<h2 class="date-header"><?xml:namespace prefix = data /><data:post.dateheader></data:post.dateheader></h2>
</b:if>
<b:include name="post" data="post"></b:include>
<b:if cond="'data:blog.pageType">

<b:if cond="data:post.allowComments">
<b:include name="comments" data="post"></b:include>
</b:if>
</b:if>
</b:loop>



3.把紅色的部分替換成


<b:if cond='data:blog.homepageUrl != data:blog.url'>
<b:if cond='data:blog.pageType == "index"'>
<!-- Show article title only -->
<h3 class='post-title'><a expr:href='data:post.url'><data:post.title/></a></h3>
<b:else/>

<b:include data='post' name='post'/>
</b:if>
<b:else/>
<b:include data='post' name='post'/>
</b:if>


4.完成

安裝 Google Analytics

安裝方法很簡單
1.要有 Google 帳號
2.連到 Google Analytics 頁面去開啟服務,註冊你想分析的網站,填完資訊後會產生一段程式碼:


<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "<a
href="https://ssl/">https://ssl</a>." : "<a href="http://www/">
http://www</a>.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google
-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
try {var pageTracker = _gat._getTracker("UA-9093907-1");
pageTracker._trackPageview();} catch(err) {}
</script>



把它貼在</body> 標記之前
這樣就ok了.

等待分析結果出現再更新圖片.

將Label設定成Label Cloud

http://chagg.blogspot.com/2006/10/blogger-betalabellabel-cloud.html 看到如何將Blogger的Label改成Label Cloud的做法. 連到原文網站 http://phy3blog.googlepages.com/Beta-Blogger-Label-Cloud.html 看, 已經有新的改法了. 改了一下, 感覺還不錯.

2009年5月30日 星期六

壓縮函式庫 Compression Library: SharpZipLib and DotNetZip

在.NET中有時會遇到處理壓縮檔的情況, 內建的GZipStream並不是非常容易使用.看了一下網路的資料, 決定使用SharpZipLib和DotNetZip.

SharpZipLib
範例如下:
  void dlZipDir(string strPath,string strFileName){
   MemoryStream ms =null;
   Response.ContentType = "application/octet-stream";
   strFileName=HttpUtility.UrlEncode(strFileName).Replace('+',' ');
   Response.AddHeader("Content-Disposition", "attachment; filename=" + strFileName+".zip");
   ms = new MemoryStream();
   zos = new ZipOutputStream(ms);
   strBaseDir=strPath+"\\";
   addZipEntry(strBaseDir);
   zos.Finish();
   zos.Close();
   Response.Clear();
   Response.BinaryWrite(ms.ToArray());
   Response.End();
  }

  void addZipEntry(string PathStr){
   DirectoryInfo di= new DirectoryInfo(PathStr);
   foreach(DirectoryInfo item in di.GetDirectories()){
   addZipEntry(item.FullName);
   }
   foreach(FileInfo item in di.GetFiles()){
   FileStream fs = File.OpenRead(item.FullName);
   byte[] buffer = new byte[fs.Length];
   fs.Read(buffer, 0, buffer.Length);
   string strEntryName=item.FullName.Replace(strBaseDir,"");
   ZipEntry entry = new ZipEntry(strEntryName);
   zos.PutNextEntry(entry);
   zos.Write(buffer, 0, buffer.Length);
   fs.Close();
   }

DotNetZip Library
範例請參考:http://www.codeplex.com/DotNetZip/Wiki/View.aspx?title=Examples&referringTitle=Home


參考:
http://blog.miniasp.com/?tag=/sharpziplib
http://blog.blueshop.com.tw/mamba/archive/2007/04/03/50387.aspx
http://died.tw/2009/04/c-zip.html

Free RichTextBox的整理

FreeTextBox
FCKeditor
Ajax Control Toolkit - HTMLEditor

.NET印BarCode

從網路上找到的一些相關資料整理
http://www.idautomation.com/formscontrols/free/
http://www.gotdotnet.com/Community/UserSamples/Details.aspx?SampleGuid=e59c9
http://www.codeproject.com/cs/miscctrl/barcodectl.asp
http://sourceforge.net/project/showfiles.php?group_id=91274&package_id=96241&release_id=397342
http://paulbanks.dnsdojo.net/projects/barcode/
http://demo.tc/view.aspx?id=381

討論文章:
http://www.purecs.net/thread/topic620_1.aspx

參考:
http://blog.miawork.com/?p=446

取得新插入資料ID及在ASP.NET使用呼叫Stored Procedure

在寫.net程式時, 常常會遇到在新增一筆資料時, 馬上要取得該筆資料的ID做運用.這時候就會用到 ExecuteScalar().

範例如下(from MSDN):


Int newID= 0;
string sql = "INSERT INTO Production (Name) VALUES (@Name); " + "SELECT CAST(scope_identity() AS int)";
using (SqlConnection conn = new SqlConnection(connString))
{
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.Add("@Name", SqlDbType.VarChar);
cmd.Parameters["@name"].Value = newName;
try
{
conn.Open();
newID = (Int)cmd.ExecuteScalar();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
return (int)newID;


備註:
scope_identity() 為MSSQL專用, MySQL使用 LAST_INSERT_ID()


在.NET的資料庫程式中, 為了一些效能最佳化和方便UI介面處理, 常會在程式中呼叫寫在SQL Server中的Stored Procedure, 大致步驟如下:
1.建立Command Object with Stored Procedure identify
SqlCommand cmd = new SqlCommand("sp_TestStoredProcedure", db);

2.CommandType設為StoredProcedure
cmd.CommandType = CommandType.StoredProcedure;

3.傳入參數
cmd.Parameters.Add("@Name",SqlDbType.NVarChar, 50);
cmd.Parameters["@Name"].Value = "test";

4.取得回傳值
可以使用DataReader取得資料.
若Stored Procedure裡有設RETURN, 必須把要取得的參數 Direction 屬性設為 ParameterDirection.ReturnValue , 並執行 ExecuteNonQuery() 方法
SqlParameter retParam = cmd.Parameters.Add("@RETURN_VALUE", SqlDbType.VarChar, 250);
retParam.Direction = ParameterDirection.ReturnValue;

若使用Output Parameter, 則把Direction 屬性為 ParameterDirection.Output 即可得到回傳的資料
SqlParameter retParam = cmd.Parameters.Add("@OUTPUT_DATA", SqlDbType.VarChar, 250);
retParam.Direction = ParameterDirection.Output;

參考:
ADO.NET 如何取得 Stored Procedure 的回傳值
MSDN:SqlCommand.ExecuteScalar 方法
The C# Station ADO.NET Tutorial Lesson 07: Using Stored Procedures