Monday, December 22, 2008

在Text Box中按Enter觸發Send事件


1private void Page_Load(object sender, System.EventArgs e)
2{
3 Response.Write(DateTime.Now.ToString() + "
");
4
5 if(!IsPostBack){
6 txt1.Attributes.Add("onkeydown","if(event.keyCode==13){" + this.GetPostBackEventReference(btnSubmit,"") + "}");
7 }
8}
9private void btnSubmit_Click(object sender, System.EventArgs e)
10{
11 Response.Write("button 被按了");

12}

Saturday, December 20, 2008

將Data轉出到CSV檔範例

Step 1:產生Data Table、DataSet等資料源

Step 2:產生CSV內容檔
例如:
string strOutPut = @"";
strOutPut += @"";

for (int rowCount = 0; rowCount < dtbl.Rows.Count; rowCount++)
{
strOutPut += string.Format("", dtbl.Rows[rowCount]["MemberClasses"].ToString(), dtbl.Rows[rowCount]["ChName"].ToString(), dtbl.Rows[rowCount]["EnName"].ToString(), dtbl.Rows[rowCount]["BaseEMail"].ToString(), dtbl.Rows[rowCount]["AreaName"].ToString(), dtbl.Rows[rowCount]["CountryName"].ToString(), dtbl.Rows[rowCount]["CapitalName"].ToString(), dtbl.Rows[rowCount]["CityName"].ToString(), dtbl.Rows[rowCount]["CmpChAddress"].ToString(), dtbl.Rows[rowCount]["CmpEnAddress"].ToString(), dtbl.Rows[rowCount]["CmpWebSite"].ToString(), dtbl.Rows[rowCount]["CmpTel"].ToString(), dtbl.Rows[rowCount]["CmpFax"].ToString(), dtbl.Rows[rowCount]["ConPerson"].ToString(), dtbl.Rows[rowCount]["JobChTitle"].ToString(), dtbl.Rows[rowCount]["JobEnTitle"].ToString(), dtbl.Rows[rowCount]["ConSex"].ToString());
}
strOutPut += "
身份公司中文名稱公司英文名稱E-Mail地區名1地區名2地區名3地區名4公司中文地址公司英文地址網址公司電話公司傳真聯絡人中文職稱英文職稱性別
{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}{10}{11}{12}{13}{14}{15}{16}
";

Step 3:匯出資料
this.EnableViewState = false;
Response.Clear();
Response.Buffer = true;
Response.Charset = "BIG5"; //設定字集
Response.AppendHeader("Content-Disposition", "attachment;filename=" + txtFileName.Text.ToString());
Response.ContentEncoding = System.Text.Encoding.GetEncoding ("BIG5");
Response.ContentType = "application/vnd.ms-excel ";
Response.Write(strOutPut);
Response.End();
dtbl.Dispose();

Tuesday, December 16, 2008

ASP.NET基礎教程-從DataView對象中增加、修改、刪除DataRowView對象

//創建和聲明DataTable對象
DataTable total=new DataTable();
//給DataTable對象添加DataColumn對象
total.Columns.Add(new DataColumn("班組",typeof(string)));
total.Columns.Add(new DataColumn("姓名",typeof(string)));
total.Columns.Add(new DataColumn("學科",typeof(string)));
total.Columns.Add(new DataColumn("成績",typeof(int)));
//聲明DataRow對象
DataRow dr=total.NewRow();
//給DataRow對象中的各列賦值
dr["班組"]= "一班";
dr["姓名"]= " 李宏";
dr["學科"]= "語文 ";
dr["成績"]=98;
//將DataRow對象添加到DataTable對象中
total.Rows.Add(dr);
dr=total.NewRow();
dr["班組"]= "一班";
dr["姓名"]= " 劉京生";
dr["學科"]= "語文 ";
dr["成績"]=96;
total.Rows.Add(dr);
//創建DataView對象,DataView對象的數據從DataTable對象中獲得
DataView dv=new DataView(total);
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
一、 將DataRowView對象添加進DataView對象中
DataRowView drv=dv.AddNew();
drv["班組"]= "一班";
drv[“姓名”]= “ 趙剛";
drv["學科"]= "國文 ";
drv[“成績”]=99;
//結束編輯 可以調用DataRowView的CancelEdit()方法取消插入
Drv.EndEdit();
二、 修改現有的DataRowView對象
//開始編輯
dv[2].BeginEdit();
//修改列值
dv[2][“成績”]=98;
//對束編輯可以調用DataRowView的CancelEdit()方法取消修改
dv[2].EndEdit();
利用DataRowView的IsNew和IsEdit屬性來檢測DataRowView是否為新行或是否被編輯過。
三、 刪除現有的DataRowView對象
//調用DataView的Delete()方法,傳入要刪除的DataRowView的索引值
dv.Delete(1);
//調用DataRowView的Delete()方法刪除
dv[1].Delete();
//調用DataTable的AcceptChanges()方法永久刪除基礎DataRow。
dt.AcceptChanges();
要取消刪除,可以調用DataTable的RejectChanges()方法取消刪除,從而取消未提交的增加與修改

Thursday, December 4, 2008

ASP.NET內抓取網址的方式一覽表(Request)

假設我們的網址為http://demo.tc/Default3.aspx?id=1019&uu=77


Request.ApplicationPath
//output:/

Request.PhysicalPath
//output:磁碟機代號:\父目錄\子目錄\Default3.aspx

System.IO.Path.GetDirectoryName(Request.PhysicalPath)
//output:磁碟機代號:\父目錄\子目錄

Request.PhysicalApplicationPath
//output:磁碟機代號:\父目錄\子目錄\

System.IO.Path.GetFileName(Request.PhysicalPath)
//output:Default3.aspx

Request.CurrentExecutionFilePath
//output:/Default3.aspx

Request.FilePath
//output:/Default3.aspx

Request.Path
//output:/Default3.aspx

Request.RawUrl
//output:/Default3.aspx?id=1019&uu=77

Request.Url.AbsolutePath
//output:/Default3.aspx

Request.Url.AbsoluteUri
//output:http://demo.tc/Default3.aspx?id=1019(這是上一頁的網址)

Request.Url.Scheme
//output:http

Request.Url.Host
//output:demo.tc

Request.Url.Port
//output:80

Request.Url.Authority
//output:demo.tc

Request.Url.LocalPath
//output:/Default3.aspx

Request.PathInfo
//output:

Request.Url.PathAndQuery
//output:/Default3.aspx?id=1019&uu=77

Request.Url.Query
//output:?id=1019&uu=77

Request.Url.Query[id]
//output:1019

Request.Url.Query[uu]
//output:77

Request.Url.Fragment
//output:

Request.Url.Segments[0]
//output:/

Request.Url.Segments[1]
//output:Default3.aspx

Monday, December 1, 2008

ASP.NET 使用 GMail 寄信並讀取信件範本(Template.htm)寄送郵件 (Gmail Send Mail ASP.NET)

ASP.NET 使用 GMail 寄信並讀取信件範本(Template.htm)寄送郵件 (Gmail Send Mail ASP.NET)

Dotjum 今天要介紹的是如何使用 .NET 來透過 Gmail 來寄信,並讀取 htm 自訂信件範本的方式,
也是用在 點部落 網站目前新版本的註冊的通知。
OK,話不多說我們直接來看Code說明,
首先在上一篇中 使用 Windows Live Mail 收 GMail 的信下來 有提到Google Gmail他提供的POP3

伺服器資訊
內送郵件伺服器 (POP3): pop.gmail.com
外寄郵件伺服器 (SMTP): smtp.gmail.com

登入資訊
使用者名稱:輸入您的 Gmail 使用者名稱 (包含 @gmail.com)
密碼:輸入您的 Gmail 密碼

[外寄伺服器 (SMTP)] 方塊中輸入 465
所以程式碼這邊就做對應的設定
MailMessage em = new MailMessage();
em.From = new System.Net.Mail.MailAddress("你的Gmail帳號@gmail.com", "顯示名稱", System.Text.Encoding.UTF8);
em.SubjectEncoding = System.Text.Encoding.UTF8;
em.BodyEncoding = Encoding.UTF8;

//信件主題
em.Subject = subject;

//內容
em.Body = message;
em.IsBodyHtml = true;
System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient();

//登入帳號認證
client.Credentials = new System.Net.NetworkCredential("你的Gmail帳號@gmail.com", "你Gmail的密碼");

//使用587 Port
client.Port = 587;
client.Host = "smtp.gmail.com";

//啟動SSL
client.EnableSsl = true;

//寄出
client.Send(em);

就這樣順利就可以寄出,當然寄送範本這邊 Dotjum 是寫好一個 HTML 的範本 MailTemplate.htm



$MemberName$ 您好:


歡迎您加入專屬於IT技術園地 點部落,這是您的啟動連結 啟動連結

請點選您的啟動連結,進行下一步的設定。


.cs
StreamReader sr = null;
string strBody = "";

//讀取信件範本
try
{
sr = new StreamReader(Server.MapPath("信件範本.htm"), Encoding.Default);
strBody = sr.ReadToEnd();

}
catch (Exception ex)
{
throw ex;
}
finally
{
sr.Close();
}

//將範本內的特定變數作取代
strBody = strBody.Replace("$MemberName$", strName);
strBody = strBody.Replace("$ActiveNo$", activeGuid);

Sunday, November 30, 2008

各種資料庫連線字串範例

ODBC DSNLess connection(不需要 DSN 的連線)
MS Access ODBC DSNless connection
Driver={Microsoft Access Driver (*.mdb)};Dbq=c:\somepath\dbname.mdb;Uid=Admin;Pwd=pass;


dBase ODBC DSNless connection
Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=c:\somepath\dbname.dbf;


Oracle ODBC DSNless connection
Driver={Microsoft ODBC for Oracle};Server=OracleServer.world;Uid=admin;Pwd=pass;


MS SQL Server DSNless connection
Driver={SQL Server};Server=servername;Database=dbname;Uid=sa;Pwd=pass;


MS Text Driver DSNless connection
Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=c:\somepath\;Extensions=asc,csv,tab,txt;Persist Security Info=False;


Visual Foxpro DSNless connection
Driver={Microsoft Visual FoxPro Driver};SourceType=DBC;SourceDB=c:\somepath\dbname.dbc;Exclusive=No;


MySQL DSNless connection
driver={mysql}; database=yourdatabase;uid=username;pwd=password;option=16386;

==================================================================

OLE DB 連線
MS Access OLE DB connection
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\somepath\dbname.mdb;User Id=admin;Password=pass;


Oracle OLE DB connection
Provider=OraOLEDB.Oracle;Data Source=dbname;User Id=admin;Password=pass;


MS SQL Server OLE DB connection
Provider=SQLOLEDB;Data Source=machineName;Initial Catalog=dbname;User ID=sa;Password=pass;


MS Text Driver OLE DB connection
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\yourpath;Extended Properties='text;FMT=Delimited'"

Tuesday, November 25, 2008

停用 Connection Pooling 機制

ADO.NET本身內建了連線管理機制,Connection Pooling,它會為應用程式所開啟的連線自動進行管理,提供連線集區統籌分配所需的連線,並且在適當的時機對其進行回收。Connection Pooling 是個不錯的構想,它特別適合用來處理大型的分散式資料庫系統,但是有一好就有一壞,在某些小型的資料庫系統當中,特別是那種獨立的桌上型小型資料庫系統,這個機制事實上並不需這種機制,在這種情形下,你可以選擇將其停用。Connection Pooling 在預設的情形下是開啟,如果你想要停用這個機制,一個很直接的方法如下:Data Source=myServerAddress;Initial Catalog=myDataBase;Integrated Security=SSPI;Pooling = False ; 在連線字串中,將其Pooling 屬性設為Flase即可。

如何從檔案讀取 XML

參考資料來源:http://support.microsoft.com/kb/307548/zh-tw

這個範例使用了一個名為 Books.xml 的檔案。您可以自行建立 Books.xml 檔案,或者使用下列資料夾中 .NET Software Development Kit (SDK) QuickStart 所附的範例檔案:
\Program Files\Microsoft Visual Studio .NET\FrameworkSDK\Samples\QuickStart\Howto\Samples\Xml\Transformxml\Cs
您必須將 Books.xml 複製到 [\Bin\Debug] 資料夾,該資料夾位在建立這個專案的資料夾之下。您也可以下載這個 Books.xml 檔案,下載的位置請參閱 〈參考〉 一節。
開啟 Visual Studio .NET。
建立一個新的 Visual C# .NET「主控台應用程式」(Console Application)。您可以直接到 〈完整程式碼清單〉 一節或是逐步進行下列步驟,建置這個應用程式。
請確定專案含有 System.Xml.dll 組件的參考。
在 System.Xml 命名空間上,指定 using 指示詞,您就無需日後在程式碼中取得 XmlTextReader 宣告資格。您必須將 using 指示詞使用在任何其他宣告之前。
using System.Xml;

建立一個 XmlTextReader 物件的執行個體 (Instance),並且將它填入 XML 檔案。通常, XmlTextReader 類別是使用於必須存取 XML 作為未經處理資料 (Raw Data),但不希望有 DOM 之額外負荷的情況下;因此, XmlTextReader 類別提供了一種更快速讀取 XML 的機制。 XmlTextReader 類別擁有不同的建構函式,用來指定 XML 資料的位置。下列程式碼會建立一個 XmlTextReader 類別的執行個體並且載入 Books.xml 檔案。請將下列程式碼加入到 Class1 的 Main 程序。
XmlTextReader reader = new XmlTextReader ("books.xml");

讀取 XML (請注意,這個步驟是示範外層的「while」迴圈,而下兩個步驟則是示範如何使用這個迴圈讀取 XML)。建立好 XmlTextReader 物件之後,請使用 Read 方法讀取 XML 資料。 Read 方法會在 XML 檔案中依序進行,直到它碰到檔案結尾為止,這時 Read 方法就會傳回一個「False」值。
while (reader.Read())
{
// Do some work here on the data.
Console.WriteLine(reader.Name);
}
Console.ReadLine();

檢查節點。為了處理 XML 資料,每筆記錄都有一個可以由 NodeType 屬性決定的節點型別。 Name 和 Value 屬性 (Property) 會傳回目前節點 (或記錄) 的節點名稱 (項目和屬性 (Attribute) 名稱) 和節點值 (節點文字)。 NodeType 列舉型別 (Enumeration) 決定了節點的型別。下列範例程式碼會顯示項目的名稱和文件類型。請注意這個範例不考慮項目屬性 (Attribute)。
while (reader.Read())
{
switch (reader.NodeType)
{
case XmlNodeType.Element: // The node is an element.
Console.Write("<" + reader.Name); Console.WriteLine(">");
break;
case XmlNodeType.Text: //Display the text in each element.
Console.WriteLine (reader.Value);
break;
case XmlNodeType. EndElement: //Display the end of the element.
Console.Write("");
break;
}
}

檢查這些屬性 (Attribute)。項目節點型別可以包括與它們關聯的節點屬性清單。 MovetoNextAttribute 方法會依序移經項目中的每一個屬性。使用 HasAttributes 屬性 (Property),測試節點是否有任何屬性 (Attribute)。 AttributeCount 屬性 (Property) 會傳回目前節點的屬性 (Attribute) 數目。
while (reader.Read())
{
switch (reader.NodeType)
{
case XmlNodeType.Element: // The node is an element.
Console.Write("<" + reader.Name); while (reader.MoveToNextAttribute()) // Read the attributes. Console.Write(" " + reader.Name + "='" + reader.Value + "'"); Console.Write(">");
Console.WriteLine(">");
break;
case XmlNodeType.Text: //Display the text in each element.
Console.WriteLine (reader.Value);
break;
case XmlNodeType. EndElement: //Display the end of the element.
Console.Write("");
break;
}
}

儲存並關閉專案。
回此頁最上方
完整程式碼清單
using System;
using System.Xml;

namespace ReadXMLfromFile
{
///
/// Summary description for Class1.
///

class Class1
{
static void Main(string[] args)
{
XmlTextReader reader = new XmlTextReader ("books.xml");
while (reader.Read())
{
switch (reader.NodeType)
{
case XmlNodeType.Element: // The node is an element.
Console.Write("<" + reader.Name); Console.WriteLine(">");
break;
case XmlNodeType.Text: //Display the text in each element.
Console.WriteLine (reader.Value);
break;
case XmlNodeType.EndElement: //Display the end of the element.
Console.Write("");
break;
}
}
Console.ReadLine();
}
}
}

如何在 64 位元版的 Windows 上切換 32 位元版的 ASP.NET 1.1 與 64 位元版的 ASP.NET 2.0

參考超結連:http://support.microsoft.com/kb/894435/zh-tw

IIS 6.0 同時支援 32 位元模式及 64 位元模式。但是,IIS 6.0 不支援同時在 64 位元版的 Windows 上執行兩種模式。ASP.NET 1.1 只能在 32 位元模式中執行。ASP.NET 2.0 可以在 32 位元模式或 64 位元模式中執行。因此,如果要同時執行 ASP.NET 1.1 和 ASP.NET 2.0,您必須在 32 位元模式中執行 IIS。在不同版本的 ASP.NET 之間切換前,請先造訪下列 Microsoft Developer Network (MSDN) 網站,以下載並安裝 ASP.NET 1.1 和 ASP.NET 2.0:
http://msdn2.microsoft.com/en-us/netframework/aa731542.aspx (http://msdn2.microsoft.com/en-us/netframework/aa731542.aspx) 例如,如果您執行的是 Microsoft Windows x64 Edition,請下載下列兩個可轉散發套件:
.NET Framework 2.0 版可轉散發套件 x64 (64 位元)
.NET Framework 1.1 版可轉散發套件安裝可轉散發套件之後,您就可以在不同版本的 ASP.NET 之間切換。如果要執行這項操作,請針對每個 ASP.NET 版本執行下列步驟:
ASP.NET 1.1 的 32 位元版本
loadTOCNode(3, 'moreinformation');

如果要執行 32 位元版的 ASP.NET 1.1,請依照下列步驟執行:
按一下 [開始],再按一下 [執行],輸入 cmd,然後按一下 [確定]。
輸入下列命令以啟用 32 位元模式:
cscript %SYSTEMDRIVE%\inetpub\adminscripts\adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 1
輸入下列命令以安裝 ASP.NET 1.1 的版本,以及在 IIS 根目錄和下列位置底下安裝指令碼對應:
%SYSTEMROOT%\Microsoft.NET\Framework\v1.1.4322\aspnet_regiis.exe -i
請確定在 Internet Information Services Manager 的 Web Service Extension 清單中,將 ASP.NET 1.1.4322 版的狀態設定為 Allowed。
ASP.NET 2.0 的 32 位元版本
loadTOCNode(3, 'moreinformation');

如果要執行 32 位元版的 ASP.NET 2.0,請依照下列步驟執行:
按一下 [開始],再按一下 [執行],輸入 cmd,然後按一下 [確定]。
輸入下列命令以啟用 32 位元模式:
cscript %SYSTEMDRIVE%\inetpub\adminscripts\adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 1
輸入下列命令以安裝 ASP.NET 2.0 (32 位元) 的版本,以及在 IIS 根目錄和下列位置底下安裝指令碼對應:
%SYSTEMROOT%\Microsoft.NET\Framework\v2.0.40607\aspnet_regiis.exe -i
請確定在 Internet Information Services Manager 的 Web Service Extension 清單中,將 ASP.NET 2.0.40607 版 (32 位元) 的狀態設定為 Allowed。
ASP.NET 2.0 的 64 位元版本
loadTOCNode(3, 'moreinformation');

如果要執行 64 位元版的 ASP.NET 2.0,請依照下列步驟執行:
按一下 [開始],再按一下 [執行],輸入 cmd,然後按一下 [確定]。
輸入下列命令以停用 32 位元模式:
cscript %SYSTEMDRIVE%\inetpub\adminscripts\adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 0
輸入下列命令以安裝 ASP.NET 2.0 的版本,以及在 IIS 根目錄和下列位置底下安裝指令碼對應:
%SYSTEMROOT%\Microsoft.NET\Framework64\v2.0.40607\aspnet_regiis.exe -i
請確定在 Internet Information Services Manager 的 Web Service Extension 清單中,將 ASP.NET 2.0.40607 版的狀態設定為 Allowed。注意 ASP.NET 2.0 的組建版本可能依目前發行的組建版本而有所不同。上述步驟適用於組建版本 2.0.40607。
回此頁最上方
Windows x64 版本的技術支援
loadTOCNode(2, 'moreinformation');

您的硬體製造商會提供有關 Microsoft Windows x64 版本的技術支援和協助。由於 Windows x64 版本是隨附在硬體中,所以您的硬體製造商會提供相關支援。您的硬體製造商可能已經利用特殊的元件自訂 Windows x64 版本安裝。特殊的元件可能包括了特定裝置驅動程式,或者可能包含了能夠使硬體發揮最大效能的選用設定。如果您需要有關 Windows x64 版本的技術協助,Microsoft 將會在合理的情況下提供協助。不過,您可能必須直接連絡製造商。因為硬體製造商已在硬體上預先安裝軟體,所以他們會是提供軟體技術支援服務的最佳人選。如需有關 Microsoft Windows XP Professional x64 Edition 的產品資訊,請造訪下列 Microsoft 網站:
http://www.microsoft.com/windowsxp/64bit/default.mspx (http://www.microsoft.com/windowsxp/64bit/default.mspx) 如需有關 Microsoft Windows Server 2003 x64 Edition 的產品資訊,請造訪下列 Microsoft 網站:
http://www.microsoft.com/windowsserver2003/64bit/x64/default.mspx (http://www.microsoft.com/windowsserver2003/64bit/x64/default.mspx)

Monday, November 3, 2008

SQL: ALTER TABLE Statement

The ALTER TABLE statement allows you to rename an existing table. It can also be used to add, modify, or drop a column from an existing table.
Renaming a table
The basic syntax for renaming a table is:
ALTER TABLE table_name RENAME TO new_table_name;
For example:
ALTER TABLE suppliers RENAME TO vendors;
This will rename the suppliers table to vendors.
Adding column(s) to a table
Syntax #1
To add a column to an existing table, the ALTER TABLE syntax is:
ALTER TABLE table_name ADD column_name column-definition;
For example:
ALTER TABLE supplier ADD supplier_name varchar2(50);
This will add a column called supplier_name to the supplier table.
Syntax #2
To add multiple columns to an existing table, the ALTER TABLE syntax is:
ALTER TABLE table_name
ADD (
column_1
column-definition,

column_2
column-definition,

...

column_n
column_definition );
For example:
ALTER TABLE supplier
ADD (
supplier_name
varchar2(50),

city
varchar2(45) );
This will add two columns (supplier_name and city) to the supplier table.
Modifying column(s) in a table
Syntax #1
To modify a column in an existing table, the ALTER TABLE syntax is:
ALTER TABLE table_name MODIFY column_name column_type;
For example:
ALTER TABLE supplier MODIFY supplier_name varchar2(100) not null;
This will modify the column called supplier_name to be a data type of varchar2(100) and force the column to not allow null values.
Syntax #2
To modify multiple columns in an existing table, the ALTER TABLE syntax is:
ALTER TABLE table_name
MODIFY (
column_1
column_type,

column_2
column_type,

...

column_n
column_type );
For example:
ALTER TABLE supplier
MODIFY (
supplier_name
varchar2(100)
not null,
city
varchar2(75)

);
This will modify both the supplier_name and city columns.
Drop column(s) in a table
Syntax #1
To drop a column in an existing table, the ALTER TABLE syntax is:
ALTER TABLE table_name DROP COLUMN column_name;
For example:
ALTER TABLE supplier DROP COLUMN supplier_name;
This will drop the column called supplier_name from the table called supplier.
Rename column(s) in a table(NEW in Oracle 9i Release 2)
Syntax #1
Starting in Oracle 9i Release 2, you can now rename a column.
To rename a column in an existing table, the ALTER TABLE syntax is:
ALTER TABLE table_name RENAME COLUMN old_name to new_name;
For example:
ALTER TABLE supplier RENAME COLUMN supplier_name to sname;
This will rename the column called supplier_name to sname.
Acknowledgements: Thanks to Dave M., Craig A., and Susan W. for contributing to this solution!
Practice Exercise #1:
Based on the departments table below, rename the departments table to depts.
CREATE TABLE departments
(
department_id
number(10)
not null,

department_name
varchar2(50)
not null,

CONSTRAINT departments_pk PRIMARY KEY (department_id)
);
Solution:
The following ALTER TABLE statement would rename the departments table to depts:
ALTER TABLE departments RENAME TO depts;
Practice Exercise #2:
Based on the employees table below, add a column called salary that is a number(6) datatype.
CREATE TABLE employees
(
employee_number
number(10)
not null,

employee_name
varchar2(50)
not null,

department_id
number(10),

CONSTRAINT employees_pk PRIMARY KEY (employee_number)
);
Solution:
The following ALTER TABLE statement would add a salary column to the employees table:
ALTER TABLE employees ADD salary number(6);
Practice Exercise #3:
Based on the customers table below, add two columns - one column called contact_name that is a varchar2(50) datatype and one column called last_contacted that is a date datatype.
CREATE TABLE customers
(
customer_id
number(10)
not null,

customer_name
varchar2(50)
not null,

address
varchar2(50),

city
varchar2(50),

state
varchar2(25),

zip_code
varchar2(10),

CONSTRAINT customers_pk PRIMARY KEY (customer_id)
);
Solution:
The following ALTER TABLE statement would add the contact_name and last_contacted columns to the customers table:
ALTER TABLE customers
ADD (
contact_name
varchar2(50),

last_contacted
date );
Practice Exercise #4:
Based on the employees table below, change the employee_name column to a varchar2(75) datatype.
CREATE TABLE employees
(
employee_number
number(10)
not null,

employee_name
varchar2(50)
not null,

department_id
number(10),

CONSTRAINT employees_pk PRIMARY KEY (employee_number)
);
Solution:
The following ALTER TABLE statement would change the datatype for the employee_name column to varchar2(75):
ALTER TABLE employees MODIFY employee_name varchar2(75);
Practice Exercise #5:
Based on the customers table below, change the customer_name column to NOT allow null values and change the state column to a varchar2(2) datatype.
CREATE TABLE customers
(
customer_id
number(10)
not null,

customer_name
varchar2(50),


address
varchar2(50),

city
varchar2(50),

state
varchar2(25),

zip_code
varchar2(10),

CONSTRAINT customers_pk PRIMARY KEY (customer_id)
);
Solution:
The following ALTER TABLE statement would modify the customer_name and state columns accordingly in the customers table:
ALTER TABLE customers
MODIFY (
customer_name
varchar2(50) not null,

state
varchar2(2) );
Practice Exercise #6:
Based on the employees table below, drop the salary column.
CREATE TABLE employees
(
employee_number
number(10)
not null,

employee_name
varchar2(50)
not null,

department_id
number(10),

salary
number(6),

CONSTRAINT employees_pk PRIMARY KEY (employee_number)
);
Solution:
The following ALTER TABLE statement would drop the salary column from the employees table:
ALTER TABLE employees DROP COLUMN salary;
Practice Exercise #7:
Based on the departments table below, rename the department_name column to dept_name.
CREATE TABLE departments
(
department_id
number(10)
not null,

department_name
varchar2(50)
not null,

CONSTRAINT departments_pk PRIMARY KEY (department_id)
);
Solution:
The following ALTER TABLE statement would rename the department_name column to dept_name in the departments table:
ALTER TABLE departments RENAME COLUMN department_name to dept_name;

Net Framework 讀取檔案變亂碼的處理方式

今天因為做長榮的案子,壓根沒想到 Microsoft .Net Framework 讀取檔案竟然會出現亂碼,以前用 VB 都鮮少遇過這種事。

重點還是在於如何解決,因為從 Windows 2000 之後的作業系統在檔案處理採用Unicode ,所以 .Net 的檔案處理也是預設為 Unicode ,但是文字檔大多還是以 ANSI 儲存,而且裡面的編碼還是用 Big5,所以才會造成中文亂碼的狀況,也就是在讀取檔案的時候就要指定編碼的樣式。
本來會造成亂碼的語法如下:
Dim reader As StreamReader = New StreamReader(FileName)
但是問題來了,System.Text.Encoding 裡面一堆,ASCII、UTF-8 等等的,要選哪個好?
其實很簡單,用 System.Text.Encoding.Default 告訴 StreamReader 目前作業系統的編碼即可。
[VB .Net] 的寫法
Dim reader As StreamReader = _New StreamReader(FileName, System.Text.Encoding.Default)
[C# .Net] 的寫法
StreamReader reader = _New StreamReader(FileName, System.Text.Encoding.Default)
結果如下:
System.Text.Encoding 可參考 MSDN:http://msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemtextencodingclasstopic.asp

===========================================================

謝謝站長的技術分享,解決了小弟一個讀檔的問題。因為小弟需要從ANSI文字檔中取得某個起訖位罝的中文字元因為文字檔是ANSI格式->中文碼為兩碼 ,.net為unicode- 每個字都是一碼,先轉為byte格式,取出ANSI格式之資料(中文字算兩碼) 正確所在,再轉回unicode格式
Dim sendBytes As [Byte]() = System.Text.Encoding.Default.GetBytes(line)
Dim strValue As String = System.Text.Encoding.Default.GetChars(sendBytes, startPos, endPos - startPos)

Tuesday, October 28, 2008

事業的分號

天啊! 我在亂七八糟的寫些什麼啊…

Saturday, October 4, 2008

用心出發的談話

在上課的時候,講師總是要我們用心出發的談話~
但我當時真的很難體會,什麼叫用心,什麼叫用腦~
當大家說我上腦的時候,我還真的很難了解,什麼叫用心說話!
一直到今天! 最近的連續幾天,我都覺得壓力很大!
白天處理公事,晚上處理家事!
似乎都沒有休息的時間,公司的事還好,但家裡的事就真的很讓我心煩!
我總覺得為什麼不能為家裡分擔壓力,但總有一些人總是成為壓力的製造者!
也有人建議我就不要管那麼多了! 但我覺得,壓力就是那麼多,我不擔就一定有人要擔!
而那個人就一定是我的父母,這也就是為什麼我不能說的原因,因為一但我跟我父母說,
這麼也許我的壓力可以小一點點,但這些壓力自然就跑到我父母的身上了!
那麼,我能說嗎? 說出來,除了這個結果之外,會有任何改善嗎? 我想不會,那說出來又有什麼用呢?
今天下午,我真的很不開心,正確來說,我已經不開心好幾天了!
一整個就是煩~~~
在老婆出門之前,我很想試著談談,所以我就跟她聊了很久!
這次的聊天,我感覺由一開始的上腦慢慢將心裡的話說出來!
我發現,上腦的時候,我的心情很不穩定!
當由心出發的時候,我慢慢的平靜下來!
說到最後,我哭了! 但我卻出奇的放鬆,因為忍了那麼多天的心情終於有一個管道釋放了!
呵! 算起來,這還是那麼多年以來,我第一次在老婆面前哭呢!
總之,今天算是體會到什麼是由心出發!
雖然我還不認為它能套在所有的事上,但感覺這是一個可以嘗試的方法!

Thursday, October 2, 2008

又累~ 又煩~

從昨天到現在,一整個就是又累又煩~
為什麼? 簡單的說就是白天有處理不完的公事,晚上有處理不完的家事~
工作上的事忙就算了! 晚上回到家,還要面對老人家老是擔心錢不夠用、其它的人又好像總是沒有辦法成熟的來處理事情,做什麼事情都是用感覺來做事!
我感覺我做不好!
我感覺你對我的態度不好!
我感覺他太會算!
我感覺誰誰誰表裡不一…
天啊! 真是夠了!
一家人怎麼可以如此對待! 就我看來,"真是一群不長進的傢伙"
不是一遇到問題,就自亂陣腳! 就是懶到一個不行,什麼事也做不好,但總覺得自己還不錯,沒有那麼差!
每個人都要別人的尊重,但說真的,為什麼別人要尊重你? 你有什麼事值得別人尊重?
老是氣這個氣那個? 但是! 生氣真的不如爭氣!!
這個道理很簡單,但為什麼大家好像真的都不懂啊~
我老是給自己一個想法:
好! 你們都不要做,我來做,我一個人來做就好!
但我真的看不下去你們的態度了!
你們到底在搞什麼啊~~
什麼時候才能對自己負責!
什麼時候,你們才能成熟!
什麼時候,你們才能成長?
我好想說,我什麼都不想管,我只想把自己的事處理好就好!
但是想到兩個老人家,我又放不下來!
所以,說到底,我還是自找罪受! 怪誰呢…
真是…

Saturday, September 27, 2008

誰說男人不能感動

我,今天30歲,再過沒有幾天,我就又變31歲啦!
但回首過去的日子,我發現,我太冷靜,太實際!
所以,我的人生中好像沒有很多能讓我感動的事!
幾乎,我從來不為自己掉眼淚!
最近的一、兩個月,我哭的次數應該是這一輩子加起來還要多吧~
但我發現,我會選擇情緒,我會抗拒生氣、害怕,但我很能接受感動!
在上課的過程中,我認識一個我人生之中沒有交集的人,他的名字叫KC!
在一個練習中,跟他對練,我發現感動真的是一個很不錯的感覺!
讓我不會想為了什麼忍住不要掉眼淚! 呵,一個男生沒事哭會不會很娘啊!(最近實在太多人說我娘的)
我真的要恭喜那些看到我娘一面的人,那代表你我熟到一定的程度了!
後來仔細想想,也許人生的感動真的太少! 那麼這樣子的人生又有什麼意思啊~
我想要的人生是精彩、不凡、過癮、其它的人想都不敢想的~
那就是我要的!
我承諾,我要為自己創業一個精彩、不凡的人生!
為了這個承諾,我要學會用心出發,我要挑戰不可能,我要一往無前! 面對其它人不敢面對的事,克服它,戰勝它!!

鳥人的我是個索取者

真的嗎? 是不是我的鳥人又出來了!
當我對朋友付出的時候,很希望別人有回應!
當我關心別人的時候,希望對方的回應!
也許只是一句謝謝! 也會讓我很開心! 讓我知道,我的付出有回應!
但仔細思考,這是不是又是我的鳥人出現啦!
切~ Nelosn~~ What's wrong with you~
醒一醒~ 別讓你的鳥人出來啦~~
既然你要關心對方、為對方付出,就不要計較對方有沒有回應!
加油! 加油! 別想那麼多~~
這只是人生中的一刻!

Wednesday, September 24, 2008

事業就竟是什麼?

什麼是夥伴? 在我的定義之中,他們是有相同目標,懂得相互支持,在對方累的時候願意分擔重量的人!
什麼樣的人可以是夥伴? 說真的,我也不太清楚了!
也許,是願意多體諒一點的人
也許,是能分擔重量的人
也許,是有相同目標能一起共事的人
雖然我這麼說,但連我自己也沒有把握。
我不能控制別人怎麼想、怎麼做,但我可以控制自己的想法、做法!
一個人物,最基本就是要有信,人無信而不立!
但也許不是每個人都能認同這一點…
難道真的要奸才能成商嗎?
那麼從商的目的到底是什麼?
只是為了賺錢嗎? 那麼這樣子的人生又有什麼意義可言呢?
那不為了賺錢要為了什麼呢? 我不知道別人怎麼想!
但我的想法是:
創業的目的是有一個大規模的事業!
有一個大規模的事業的目的是賺很多的錢!
賺很多的錢的目是的能幫助更多需要幫助的人!
我要這個世界因為我而更完美!
現在的世界已經不是靠一個人能夠成功的了!
但如果身邊的夥伴不支持你,我相信會成功的更慢!
但如果將它當成一課! 也許每件事都會有不同的看法了吧!

秘密

是一本書,同時也有影片!
主要的內容環繞在一個理論上,那就是吸引理論,其大約的內容是宇宙是有無盡的力量的,幫助你達到你所"想"的!
不管你想的是好的還是不好的,宇宙力量都會幫你達到!
這也就是為什麼,成功的人越成功,失敗的人越失敗了!
凡事只要你相信,你就會做到!
裡面提到了一個三步驟:
ask(詢求):將你想要的向宇宙尋求
believe(相信):相信你能得到,甚至是已經得到
receive(接收):接受宇宙給你的結果
上面的東西,聽起來好很玄,不太切實際!
但我覺得其中傳達一個很好的意念,那就是信心!
要對你所需要的人、事、時、地、物保有強大的信心!
那自然就能化不可能為可能了!

Tuesday, September 23, 2008

被支持的感覺對我來說真的很重要

有的人,真的是很好的朋友,但不一定真的可以共事!
就我的感覺來說,我個人的感覺,承諾真的非常重要!
因為我覺得,一個不重視自己承諾的人,難成大器!
你說我傻也好! 笨也好! 但這就是我! 只要我說出來,我就一定要做到!
但有的時候,真的會很孤單,因為不是所有的人都能瞭解這些!
當我最需要支援的時候,身邊不見得會有人支援你!
但可憐的我,卻不知道該怎麼表達自己的感覺!
也許是因為冷血,我必須冷靜、平靜的接受這一切!
為了走過這一關,我必須克服這一切~
我相信我可以,我也一定會做到!
等我做到的那一刻,我會讓全世界都知道我不是隨口說說的!
我的願望是,我要這個世界因為我而更完美!
真的! 我說到做到,因為,那就是我~

Sunday, September 21, 2008

全新的人生

如果,接下來人生的生活方式,可以由自己選擇,你打算過什麼樣的生活?
我想,大部份的人都沒有想過這個問題! 如果還沒有想過,不妨試著想想看!
如果,人生能讓我自己選擇! 我要這個世界因為我的存在而更加完美!
也許,人真的不能掌握長度,但至少能掌握寬度!
以前! 我會認為我能做的選項不多!
但今天,我相信生命是掌握在我自己的手中!
現在,我相信「若要如何、全憑自己」!
人生會不斷的有考題出現,我選擇面對全部的挑戰,戰勝它、克服它!
它對我將不構成任何威脅。

Saturday, September 20, 2008

現在不做,你要等到什麼時候

不知道為什麼,今天在騎車上班的路上,忽然想起幾年前在我二專的時候,有一次去到淡水一間中途之家的事,所以我就提筆寫了這封Mail!

中途之家,感覺起來好像是轉際站,一些沒有父母等待別人收養的小孩子,就會在這裡等待別人來看他們,等著有人來收養他們!

一天,我也是探望人群中的一個,這裡的孩子由小到大都有,小到還不滿週歲,大的好像有到國中、高中的都有!那裡的環境說不上好,就好像一般孤兒院給人家的感覺差不多!

有著好心的阿姨照顧他們(呵! 這些好像都還不是重點)!

我想就直接切入重點吧,我們去的時間剛好是剛下課的時間,所以比較年長的孩子都不在,留下來的都是大約在幼稚園年紀以下的小孩,我發現,這些小朋友叫叔叔、阿姨、哥哥、姐姐比叫爸爸、媽媽來的順口(也許他們從來沒有機會叫爸爸、媽媽),最會說的卻是「再見」,我想是因為來的人都要離開吧!

其中,有一個大約五歲叫豆豆的小孩,是個輕度弱智、重聽、重度近視、侏儒的孩子(前幾年我在電視上看到她被國外人家收養的新聞),給我的印象最深!

她連哥哥、姐姐都叫不好,但是當看護阿姨叫她說再見的時候,她確連想都不用想的說出流利的再見!當下,給我很大的震撼!!!!!

我想著,這個孩子,要用這樣子的身體活一輩子,她連選的機會也沒有!

老天給她這樣子的身體,她也無從埋怨!我們四肢建全、頭腦正常(有的人是聰明,但我知道,我只是屬於正常的那個)但確常常埋怨誰不好,自己怎麼不順!

想想這些孩子吧!他們連選的機會都沒有,就失去了父母、正常的身體!我想不通,如果她們能這樣子活一輩子,那我們有什麼是做不到的!也許是從那個時候,我覺得,對我來說,沒有什麼是比用那樣子的身體活一輩子還要困難的!

如果他們可以用那樣子的身體活一輩子,那麼一切正常的我們,沒有理由做不到自己想做的事!我想說的是,也許,我們該放下執著、停止埋怨,想想,當下自己該做些什麼!不要再等了,時間是不會等你的!共勉之…

吃得苦中苦,真能成為人上之人?

自古留傳下來一句話\"吃得苦中苦,方為人上人\",人們總是將這句話奉為圭臬,但慢慢的我對這句話卻產生了不一樣的想法,首先在大家開始讀下面的文章時,我要先表明,我認為所有的工作都是高尚的,不管您做的是什麼,都是依憑著自己的努力為了自己的生活而奮鬥,我只是單純的希望利用這篇文章,與大家分享一下我的想法,如有得罪,還請多多包涵。
如果我問人,一個一天開車16個小時的計程車司機苦不苦,大家會說苦! 如果我問人,一個一天在大太陽底下工作12個小時的工人苦不苦,大家也會說苦!但不知道大家有沒有發現,這些我們認為很\"苦\"的工作,在一般的情況之下,都很難出頭!
有的人說,我工作的地方沒有冷氣、一天上班超過8個小時,我好苦啊~有的人又說,我的工作必須一直站在那,工作那麼無聊,我好苦啊!如果真是這樣,那麼照這句古語來說,這些人不都應該早就成功了嗎? 我們看到所謂成功的人,大多都坐在冷氣房,吹著冷氣,看著報紙,但這些人確實取得了他們所希望的成功!我們看到的是他現在產生的表像,讓我們將時間推回幾十年前,他們應該在做什麼呢? 我想,我們看到的情況,有可能(當然不會是全部)是一個人正在為了解決一些擾人的問題而焦頭爛額,他可能正為了一批貨款交不出去而頭大,也可能正為了一件工作無法順利完成而苦思解決的方法。表面上看起來,這個人正在辦公室裡吹著冷氣,只是坐在那裡想想辦法,怎麼會苦呢? 那麼如果這樣不是苦,不就推翻了\"吃得苦中苦,方為人上人\"這句話了嗎??也許,這句話並沒有錯! 但大家對於它的解讀,可能與原意有一點出入!
如果我再問人,一個一天開車16個小時的計程車司機累不累,大家會說累!我再問他苦不苦的時候,會說苦的人明顯少了很多!如果我再問人,一個一天在大太陽底下工作12個小時的工人累不累,大家會說累!我再問他苦不苦的時候,會說苦的人明顯少了很多!這樣一來,其實就很明顯了!這些工作很累的人,其實並不辛苦!累是身體對於工作的疲乏而產生的狀況! 而苦卻是心理面對困難時而產生的反應!!再說的清楚一點! 我認為應該是\"勞心者苦,勞力者累\" 這樣一來,那些所謂\"累\"的工作,是不是就沒有做的價值了!這也是否定的! 所有的工作,都必須有人來做,也都有做的價值!更重要的,在於你對自己的定位,你當下再做這件事情所抱的心態!如果你用心做每一件工作,在做的過程當中,你將會發現自己累積了很多經驗! 而這些經驗會使你在所處的領域中成為翹首,這就是為什麼\"行行能出狀元\"!最後再跟大家分享一句話,\"重點不在你現在在那裡! 重點在於你將往那裡去\"如果每天,你能比別人多辛苦十分鐘,十年下來就不得了!!由小可見大! 由近可窺遠!! 您現在的做為,不難發現您十年後將處的環境!一點小小的想法,不見得是對的,只是個人的體會,而樂於與大家分享!希望大家未來都能達到自己希望的目標!共勉之~

天下無難事,只怕賴皮狗

大家都說萬事起頭難,但它到底難在那呢?我覺得,難在大家對它不熟悉,難在不知道它還要難多久!所以,很多時候很多人在它變熟悉之前就放棄了!每一件事在剛開始接觸的時候,因為對它不熟,所以執行起來一定是問題百出,一次一次又一次不斷出現新的問題,大多數的人在這個時候已經失去信心了!接下來很多人就會開始思考、開始自我安慰:這個是不是我要的、我不需要這麼做也可以活的下去、我可能不適合做這個、該是放棄的時候到了…也許有的人慢慢就放棄了! 但事實上,苦難可能本來也就快結束,因為你的放棄,同時也錯失了成功的機會!天下無難事,只怕賴皮狗!在做一件事之前,你是不是確定已經想清楚了,在做一件事之後,你是不是肯定已經想過所有的辦法了?在做一件你不熟悉的事情時,一定要先有一個心理建設,那就是因為你不熟悉,所以問題的發生是必然的,問題的來到只是提醒你有一些東西你沒有想清楚,下次別再犯了!這是一個挑戰,一個成長的機會,而不代表你的失敗!只要用這個失誤來換取經驗,這就是你的成功!就好像賴皮狗一樣,不怕失敗,不怕措折,認為這些都是理所當然的事情!慢慢的,你會由陌生變熟悉,由熟悉變拿手,拿手變專精,再後面等待著你的,就是大家渴望的成功。共逸之!

該當領導人而不是老闆

日前,在商業週刊,看到了一句話,要當領導人而不是老闆!當下,我有了很多的感觸!一句大家耳熟能詳的一句話,寧為雞首勿為牛後,很多人都希望可以當老闆!先來想想,為什麼大家都想當老闆? 為了實現自己的願望? 為了不讓別人管? 還是為了有指使別人的優越感呢?再來看看,老闆跟領導人之間所謂的差距?我自己有一點感覺,提出來跟各位前輩討論,也請各位指正:我個人認為,最主要的一點,就是心態上的不同,老闆認為員工是機器,是生財工具,是自已付錢買來的,自己怎麼用都行,雖然一樣要付薪水,但領導者會將員工視為團隊中的一份子,視其為一家人,會真的關心員工,但當賞則賞、當罰則罰。我看到很多的老闆,對員工頤氣指使,好不威風,彷彿自己是一朝之王,在下頗不以為然,其實我覺得當一間公司的老闆並沒有什麼了不起的,現在,只需要有一點點錢,取個名字,自然就能成立一間公司了,一點也不難。我覺得難的是將一間公司推向成功的道路之上,而這個不見得是一個"老闆"做的到的,這件事要成,主事者必須要有"領導者"的特質,會用人、有遠見、能讓員工心甘情願追隨,而這些不見得是一個老闆做的到的。小弟認為,一個領導者,最基本該有的特質,就是該有自己的思維,但能傾聽別人的想法,又能不受他人的影響,有自信,但別自負,相信自己但不是執著,對於員工要的是關心,雖凡事秉公處理,但並不是單純的指使,如此方能做出正確的判斷。提出個人一點點淺見,與大家分享,也請大家指教。

選擇

原來真的沒有對錯,那只是在當下我能做的最好的選擇!
不管我喜不喜歡它,它就是我的選擇!
在選了之後,我唯一能做的就是堅持到最後。
2008/09/12日我下了我最後的決定,我不是里程92的一員!
這個決定我下的很難過,因為我知道我很想跟大家一起! 但我也知道我必須將時間全部放在我的事業上!
這個決定也許有一些人至今沒有辦法接受!
但這真的是我的決定! 我同時也決定,就算我不是L92的一員,我也一定會陪大家走完全程!
這不單只是我個人的決定,也是我對大家的承諾,我一定會做到它!
請相信我,也請支持我!!