2014年2月25日 星期二

[ASP.NET] Server Control Table使用記錄

命名空間:
System.Web.UI.WebControls


語法:
<asp:Table borderwidth="1" id="tbTest" runat="server">
           <asp:TableRow>
               <asp:TableCell>
                   <asp:Label ID="lblUserNo" runat="server" Text="" />
               </asp:TableCell>
               <asp:TableCell>
                   <asp:Label ID="lblBirthday" runat="server" Text="" />
               </asp:TableCell>
           </asp:TableRow>
           <asp:TableRow>
               <asp:TableCell>
                   <asp:TextBox ID="txtUserNo" runat="server"></asp:TextBox>
               </asp:TableCell>
               <asp:TableCell>
                   <asp:TextBox ID="txtBirthday" runat="server"></asp:TextBox>
                   <asp:CalendarExtender ID="txtBirthday_CalendarExtender" runat="server"
                        Enabled="True" TargetControlID="txtBirthday" Format="yyyy/MM/dd">
                   </asp:CalendarExtender>
               </asp:TableCell>
           </asp:TableRow>
</asp:Table>


參考資料:
http://msdn.microsoft.com/zh-tw/library/system.web.ui.webcontrols.table(v=vs.110).aspx
http://imagine-code.blogspot.tw/2013/07/aspnet_3.html

[ASP.NET] 連接Oracle

問題:
大部分ASP.NET網站搭配SQL Server較多,若DB使用Oracle,該怎麼做?


作法(使用oleDb):
0. 主機或local需安裝Oracle client,在tnsname.ora設定連Oracle Server服務資訊。

1. 在web.config的connectionStrings標籤內加入連線資訊,例:
<add name="OracleDBConn" connectionString="Provider=MSDAORA(OraOLEDB.Oracle);Data Source=service_name;Persist Security Info=True;User ID=user_id;Password=password"/>

2. 在DB存取class中,引用System.Data.OleDb命名空間;

3. 擷取連線字串(需引用System.Configuration命名空間):
private static string OracleDBConn = ConfigurationManager.ConnectionStrings["OracleDBConn"].ConnectionString;

4. 撰寫操作method,例:
public static DataTable ExecuteDataTable(string strQuery)
{
    try
    {
        DataTable dtReturn = new DataTable();
        using (OleDbConnection conn = new OleDbConnection(OracleDBConn))
        {
            using (OleDbDataAdapter sda = new OleDbDataAdapter(strQuery, conn))
            {
                sda.Fill(dtReturn);
                return dtReturn;
            }
        }
    }
    catch (Exception ex)
    {
        throw ex;
    }
}


參考資料:
http://msdn.microsoft.com/zh-tw/library/system.data.oledb(v=vs.110).aspx
http://c.ittoolbox.com/groups/technical-functional/csharp-l/connection-string-for-ms-access-in-c-3271615

[Oracle] DDL/alter table schema

說明:想增加或刪除欄位、調整欄位長度或名稱時,該怎麼做?


語法:
1. 增加欄位:ALTER TABLE table_name ADD column_name column-definition;
    例:ALTER TABLE account ADD user_id VARCHAR2(10);

2. 刪除欄位:ALTER TABLE table_name DROP COLUMN column_name;
    例:ALTER TABLE account DROP COLUMN user_id;

3. 調整欄位:ALTER TABLE table_name MODIFY column_name column-definition;
                        ALTER TABLE table_name MODIFY
                        (column_name1 column-definition,
                         column_name2 column-definition);
    例:ALTER TABLE account MODIFY user_id VARCHAR2(20);

4. 調整欄位名稱:ALTER TABLE table_name RENAME COLUMN old_name to new-name;
    例:ALTER TABLE account RENAME COLUMN user_id to user;


參考資料:
http://www.techonthenet.com/sql/tables/alter_table.php
http://www.dba-oracle.com/t_alter_table_modify_column_syntax_example.htm
http://www.dotblogs.com.tw/dc690216/archive/2011/02/23/21534.aspx
http://docs.oracle.com/cd/E17952_01/refman-5.0-en/alter-table.html
http://blog.xuite.net/f8789/DCLoveEP/43020770-PLSQL+%26+SQL+-+%E4%BF%AE%E6%94%B9%E8%B3%87%E6%96%99%E8%A1%A8%E4%B8%AD%E7%9A%84%E6%AC%84%E4%BD%8D%E9%95%B7%E5%BA%A6

2014年2月7日 星期五

[Crystal Report] 應用程式中發生伺服器錯誤。無法載入檔案或組件 'CrystalDecisions.Web, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=692fbea5521e1304' 或其相依性的其中之一。系統找不到指定的檔案。

說明:用VS 2008 (.NET Framework 3.5)內建的Crystal Report開發web-based報表 (import CrystalDecisions.CrystalReports.Engine),將ASP.NET佈到.NET Framework 2.0的Server上,出現該錯誤訊息:

應用程式中發生伺服器錯誤。
無法載入檔案或組件 'CrystalDecisions.CrystalReports.Engine, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=692fbea5521e1304' 或其相依性的其中之一。 系統找不到指定的檔案。

也就是web.config裡註記要載入Crystal Report的相關dll找不到。


解決方法:
到網路上下載CRRedist2008_x86.msi檔案,並安裝到Server上,確認C:\Windows\assembly內相關dll安裝成功後,重試即可。


參考資料:
http://social.msdn.microsoft.com/Forums/zh-TW/80764698-46a4-43ba-87fb-094911442fea/aspnet-crystal-reports-vs-2008-ok-iisruntime?forum=236
http://code.google.com/p/crystaldelivery/downloads/detail?name=CRRedist2008_x86.zip&can=2&q

[IIS] 伺服器應用程式無法使用 您嘗試在此 Web 伺服器上存取的 Web 應用程式目前無法使用。請按 Web 瀏覽器中的 [重新整理] 按鈕,再試一次。 系統管理員注意: Web 伺服器的應用程式事件記錄檔中的錯誤訊息詳細說明了這項特定要求失敗原因。請檢閱這個記錄項目,查看造成錯誤的原因為何。

說明:將ASP.NET程式佈上IIS,出現錯誤訊息:

伺服器應用程式無法使用
您嘗試在此 Web 伺服器上存取的 Web 應用程式目前無法使用。請按 Web 瀏覽器中的 [重新整理] 按鈕,再試一次。
系統管理員注意: Web 伺服器的應用程式事件記錄檔中的錯誤訊息詳細說明了這項特定要求失敗原因。請檢閱這個記錄項目,查看造成錯誤的原因為何。

因我網站虛擬目錄有使用.NET 2.0與.NET 3.5的專案,皆使用同一個應用程式集區,而同一個IIS process不能執行不同版本的ASP.NET,因此出現該錯誤。


解決方法:
依ASP.NET版本調整虛擬目錄使用的應用程式集區即可。


參考資料:
http://www.dotblogs.com.tw/rainmaker/archive/2013/03/07/95717.aspx
http://blog.xuite.net/wallaces528/blog/28604194

2014年2月4日 星期二

[C#] 取得執行中的method name

說明:想取得執行的method name,該怎麼做?


作法:
1. 使用System.Reflection.MethodBase.GetCurrentMethod().Name
2. 使用this.GetType().Name
兩者皆是利用reflection來取得執行中object的型別屬性,其中MSDN提到若執行中method是泛型method,GetCurrentMethod()會回傳泛型method的定義。


參考資料:
http://msdn.microsoft.com/en-us/library/system.reflection.methodbase(v=vs.90).aspx
http://msdn.microsoft.com/zh-tw/library/ms173183(v=vs.90).ASPX
http://stackoverflow.com/questions/2652460/c-sharp-how-to-get-the-name-of-the-current-method-from-code
http://stackoverflow.com/questions/2113069/c-sharp-getting-its-own-class-name
http://stackoverflow.com/questions/44153/can-you-use-reflection-to-find-the-name-of-the-currently-executing-method
http://blogs.msdn.com/b/webdevelopertips/archive/2009/06/23/tip-83-did-you-know-you-can-get-the-name-of-the-calling-method-from-the-stack-using-reflection.aspx
http://joelabrahamsson.com/getting-property-and-method-names-using-static-reflection-in-c/