目前分類:電腦玩咖 (98)

瀏覽方式: 標題列表 簡短摘要
1.函數f(n), n>=0:
f(0)=0
f(1)=1
f(2)=3
f(3)=6
...
可得:
f(0)=0
f(1)=1
f(2)=f(1)+2=3
f(3)=f(2)+3=6

2.費氏函數
F(n)=n, if n<=1;
F(n)=F(n-1)+F(n-2), otherwise


#include
void fn1(void);
void fab(void);

void main(void)
{
    fn1();
    fab();
    return;
}
void fn1(void)
{
    int n=0;
    printf("please input n: ");
    scanf("%d",&n);
    printf("for: f(%d)=%d,recursive: f(%d)=%d\n",n,fn1for(n),n,fn1r(n));
    return;
}
int fn1r(int n)
{
    if(n<=0)
        return 0;
    else if(n==1)
        return 1;
    else
        return fn1r(n-1)+n;
}
int fn1for(int n)
{
    int fn=0;
    int i;
    
    for(i=1; i<=n; i++)
    {
        fn=fn+i;
    }
    
    return fn;
}
void fab(void)
{
    int n=0;
    printf("please input n: ");
    scanf("%d",&n);
    printf("for: f(%d)=%d,recursive: f(%d)=%d\n",n,fabfor(n),n,fabr(n));
    return;
}
int fabr(int n)
{
    if(n<=1)
        return n;
    else
        return fabr(n-1)+fabr(n-2);
}
int fabfor(int n)
{
    int f1=0,f2=0,fn=0,i;
    for(i=0; i<=n; i++)
    {
        if(i<=1)
            fn=i;
        else
            fn=f1+f2;
        
        f2=f1;
        f1=fn;
        /*printf("f1=%d,f2=%d,f(%d)=%d\n",f1,f2,i,fn);*/
    }
    return fn;
}

伊 發表在 痞客邦 留言(0) 人氣()

說明:
1.拖曳SqlDataSource至頁面,設定好SQL語法。
2.拖曳GridView至頁面,設定來源為SqlDataSource。
3.請於GridView_PreRender加入以下程式碼。

Protected Sub GridView1_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridView1.PreRender
    Dim i As Integer = 1
    Dim mySingleRow As GridViewRow

    For c As Short = 0 To GridView1.Columns.Count - 1
        i = 1
        For Each mySingleRow In GridView1.Rows
            If mySingleRow.RowIndex = 0 Then
                mySingleRow.Cells(c).RowSpan = 1
            Else
                If mySingleRow.Cells(c).Text.Trim() = _
                GridView1.Rows(mySingleRow.RowIndex - i).Cells(c).Text.Trim() Then
                    GridView1.Rows(mySingleRow.RowIndex - i).Cells(c).RowSpan += 1
                    i = i + 1
                    mySingleRow.Cells(c).Visible = False
                Else
                    GridView1.Rows(mySingleRow.RowIndex).Cells(c).RowSpan = 1
                    i = 1
                End If
            End If
        Next
    Next
End Sub



補充:
如使用程式碼指派DataSource給GridView,如下:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Dim sqlselect As String
    sqlselect = "SELECT * FROM TABLE"
    Dim dt1 As New Data.DataTable
    dt1 = db1.GetDataTable(sqlselect)
    GridView1.DataSource = dt1
    GridView1.DataBind()
End Sub

則GridView_PreRender內無法使用:For c As Short = 0 To GridView1.Columns.Count - 1
GridView1.Columns.Count抓不到值,需自行指派一個整數,例如:For c As Short = 0 To 2


效果示意圖:
合併GridView儲存格.gif

伊 發表在 痞客邦 留言(0) 人氣()

當資料庫越來越肥大...
SQLServer資料庫壓縮.jpg

伊 發表在 痞客邦 留言(0) 人氣()

'DataTable存成CSV檔的程式碼----------------------------------
Dim SavePath As String = "C:\Temp\"
Dim FileName As String = "Test.csv"
Dim FilePath As String = SavePath + FileName
Dim sw As New System.IO.StreamWriter(FilePath , False, System.Text.Encoding.Default)

'寫入欄位名稱
If MyDataTable.Columns.Count > 0 Then
    sw.Write(MyDataTable.Columns.Item(0).ColumnName.ToString)
End If
For i As Integer = 1 To MyDataTable.Columns.Count - 1
    sw.Write("," + MyDataTable.Columns.Item(i).ColumnName.ToString)
Next
sw.Write(sw.NewLine)

'寫入各欄位資料
For i As Integer = 0 To MyDataTable.Rows.Count - 1
    For j As Integer = 0 To MyDataTable.Columns.Count - 1
        If j = 0 Then
            sw.Write(MyDataTable.Rows(i)(j))
        Else
            sw.Write("," + MyDataTable.Rows(i)(j))
        End If
    Next
    sw.Write(sw.NewLine)
Next

sw.Close()

'使用SaveAs.aspx隱藏檔案路徑讓使用者下載
Response.Redirect("SaveAs.aspx?filename=" + FileName)
'SaveAs.aspx.vb Page_Load 內的程式碼--------------------------
Dim SavePath As String = "C:\Temp\"
Dim FileName As String = Request.QueryString("filename").ToString
Dim FilePath As String = SavePath + FileName

'設定表頭並存檔
If System.IO.File.Exists(filep) Then
    With Response
        .ContentType = "application/save-as"
        .AddHeader("content-disposition", "attachment; filename=" & FileName)
        .ContentEncoding = Encoding.UTF8
        .WriteFile(FilePath)
    End With
Else
    Response.Write("no file")
End If
'做成Class方便使用
Public Class ExportCSV
    Function DataTableToCSV(ByVal dt As Data.DataTable, ByVal FileName As String, ByVal SavePath As String) As Boolean
        Dim FilePath As String = SavePath + FileName
        Try
            Dim sw As New System.IO.StreamWriter(FilePath, False, System.Text.Encoding.Default)

            If dt.Columns.Count > 0 Then
                sw.Write(dt.Columns.Item(0).ColumnName.ToString)
            End If
            For i As Integer = 1 To dt.Columns.Count - 1
                sw.Write("," + dt.Columns.Item(i).ColumnName.ToString)
            Next
            sw.Write(sw.NewLine)

            For i As Integer = 0 To dt.Rows.Count - 1
                For j As Integer = 0 To dt.Columns.Count - 1
                    If j = 0 Then
                        sw.Write(dt.Rows(i)(j))
                    Else
                        sw.Write("," + dt.Rows(i)(j))
                    End If
                Next
                sw.Write(sw.NewLine)
            Next
            sw.Close()
        Catch ex As Exception
            'MsgBox(ex.Message)
            Throw ex
        End Try

        If System.IO.File.Exists(FilePath) Then
            Return True
        Else
            Return False
        End If

    End Function
End Class
'存成CSV檔
Dim SavePath As String = "C:\Temp\"
Dim FileName As String = "Test.csv"
Dim epCsv As New ExportCSV
If epCsv.DataTableToCSV(MyDataTable, FileName, SavePath) = True Then
    Response.Redirect("SaveAs.aspx?filename=" + FileName)
End If

伊 發表在 痞客邦 留言(0) 人氣()

1.資料在資料庫系統中,通常是指格子內的文字、數字,但單一格子的資料是沒有意義的,以身分證字號為例,必須結合姓名、電話、等..欄位,才形成一個人的資本資料,對資料庫而言,此一基本資料就是紀錄

2.資料經過處理,產生某種特殊意義(提供有用的訊息),就可視為資訊(Infomation),而此一整理的動作,在電腦內就是使用資料庫,其作用就是將原本雜亂無章的資料,經由資料庫的處理,轉化為可以依不同目的,取得的資訊。

3.資料庫系統發展史:集中式處理→主從架構→分散式處理

資料庫架構發展史.gif  

4.資料庫管理系統發展史:階層式→網路式→關聯式

5.正規化:是系統分析階段必須完成的動作,目的是在關聯式架構中,適當及正確的切割、建立多個關聯表,在實務上稱為資料表。
正規化的目的是確立使用多少資料表。
正規化的資料,可擁有最節省儲存空間及便於編輯等優點。
正規化的方法是逐步分解,同時必須保留原意

6.WHERE及HAVING
使用群組之後,可以在群組及非群組欄位使用條件,但語法不同,群組欄位是HAVING,非群組欄位是WHERE,且作為WHERE的欄位無法顯示在查詢結果。
WHERE條件的欄位不可置於SELECT及GROUP BY之後;HAVING則可。

7.資料庫系統少應包含以下內容:人的參予、資料庫管理系統、資料庫、應用程式及開發工具。

8.資料庫管理系統(DBMS)是指,在特定需求及目的下,由一個或多個程式組成。

伊 發表在 痞客邦 留言(0) 人氣()

加入參考 => COM => Microsoft Excel 10.0 Object Library 後,發生下列錯誤:
CLSID {00024500-0000-0000-C000-000000000046} 的元件擷取 COM Class Factory 失敗: 80070005

解決辦法:
1.執行 dcomcnfg.exe(元件服務)
2.主控台根目錄>元件服務>電腦>我的電腦>DCOM設定>找到Microsoft Excel 應用程式>右鍵>內容
3.安全性設定:每個自訂都新增使用者IUSR_servername及IWAM_servername,設定允許存取。
4.識別碼:要設定使用者。(但是我一直設定失敗,所以我設定 互動使用者-目前登入的使用者)


參考
http://tlcheng.twbbs.org/TLCheng/Basic/vbs/dcom/automation.htm
http://www.dotblogs.com.tw/darren.net/archive/2009/11/02/darren.net_asp.net_com_vsto_excel_word.aspx

伊 發表在 痞客邦 留言(0) 人氣()


function getPathName()
{
    if(window.location.protocol =="file:")
    {
        var x = unescape(window.location.pathname);

        for(;x.lastIndexOf("/")>0;)
        {
            x=x.replace("\/","\\");
        }
        var pos = x.lastIndexOf("\\");

        var pname=x.substring(1,pos+1);

        return pname;
    }
    else
    {
        return null;
    }
}

var fname = "db1.mdb";
fname = getPathName() + fname;

var strSQL = "SELECT * FORM TABLE";

/************** 寫法1 **************/
var objConn = new ActiveXObject("ADODB.Connection");
var strConnString = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="+fname;
objConn.Open(strConnString);

var objRS = objConn.Execute(strSQL);
/***********************************/

/************** 寫法2 **************/
var objConn = new ActiveXObject("ADODB.Connection");
objConn.Provider = "Microsoft.Jet.OLEDB.4.0";
objConn.ConnectionString = "Data Source=" + fname;
objConn.open;

var objRS = new ActiveXObject("ADODB.Recordset");
objRS.open(strSQL,objConn);
/***********************************/


var iFieldsCount = objRS.Fields.Count - 1;

if (!objRS.EOF)
{
    for (var i=0; i <= iFieldsCount; i++)
        document.wirteln(objRS.Fields(i).Name);

    while (!RS.EOF)
    {
        for (var i=0; i <= iFieldsCount; i++)
            document.wirteln(objRS.Fields(i).Value);

        objRS.moveNext();
    }
}

objRS.Close();
objConn.Close();


/* 補充說明
*
* 1.ActiveXObject只有IE可以用
*
* 2.ConnectionString有很多種類
* 可參考網址: http://www.devguru.com/technologies/ADO/8533.asp
*
* OLE DB Provider for Active Directory Service:
* "Provider=ADSDSOObject;"
*
* OLE DB Provider for Index Server:
* "Provider=MSIDXS;"
*
* OLE DB Provider for Internet Publishing:
* "Provider=MSDAIPP.DSO; Data Source=http://www.devguru.com/guru_dir;"
*
* OLE DB Provider for Microsoft Jet:
* "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=GuruData.mdb;"
*
* OLE DB Provider for ODBC Databases:
* "Provider=MSDASQL; Driver={SQL Server}; Server=GuruServer;
* DataBase=GuruDatabase;"
*
* OLE DB Provider for Oracle:
* "Provider=MSDAORA; Data Source=GuruTable;"
*
* OLE DB Provider for SQL Server:
* "Provider=SQLOLEDB; Data Source=GuruServer; Network Library=DBMSSOCN;
* Initial Catalog=GuruPubs;"
*
*
* 3.使用寫法2的objRS.open(strSQL,objConn)改成objRS.open(strSQL,objConn,1)
* 將第3個參數設為1,可以啟用分頁、指定目前頁數的功能
*
* 4.其他說明待補
*
*/

伊 發表在 痞客邦 留言(0) 人氣()

<script language="javascript">

var test =

{

max:function(a,b){ return a>b?a:b; },

min:function(a,b){ return a<b?a:b; }

}

alert(test.max(1,2)); //會顯示2

alert(test.min(1,2)); //會顯示1

</script>

可以把同類型的function放在一個object裡面,看起來比較明瞭,code也比較好整理。

伊 發表在 痞客邦 留言(0) 人氣()

引用: http://berrybit.pixnet.net/blog/post/25290824

select 學號, avg(成績) as 平均成績 from 成績表 group by 學號 order by avg(成績) desc
p.s.計算平均成績,其中" as 平均成績 "為設定欄位名稱," group by 學號"為同一學號為一組作計算, desc 為遞減排列, avg為計算平均值,sum則為計算總成績

應用:
SELECT AVG(數值) AS 數值, 測項
FROM 資料表名稱
WHERE (設備 = @設備名稱)
AND (日期時間 >= @日期時間開始)
AND (日期時間 <= @日期時間結束)
GROUP BY 測項
ORDER BY 測項
取得指定的設備,某一段時間的平均數值。

伊 發表在 痞客邦 留言(0) 人氣()

1.ping 127.0.0.1
127.0.0.1是Lookback位址,封包不會送到網路上,而是送至本機的Lookback驅動程式,此一動作是測試TCP/IP是否正常運作。

2.ping 本機IP位址
若步驟1本機TCP/IP設定正確,接下來可試試網路裝置是否正常。若有問題,則不會有回應。

3.ping 對外連線的Bridge/Gateway/Swtich/Router...等
若成功,代表內部網路與對外連線的設備正常。

4.ping 網路中另一台電腦的IP位址
若有回應,代表IP設定全部正常。

5.ping 網際網路上的任何有效網址
如有回應,代表DNS設定無誤。

以上是粗略的診斷,從書上看到整理出來的,參考參考就好。

伊 發表在 痞客邦 留言(0) 人氣()

OSI OSI功能與說明 OSI Layer DoD TCP/IP協定組合
Application Layer
應用層
應用程式,如電子郵件系統,資料庫管理系統。 Layer-7 Application
應用層
Telnet FTP SMTP
Presentation Layer
出席層
資料的壓縮還原、網路安全、檔案傳送。 Layer-6
Session Layer
會談層
網路管理、密碼辨識、簽到簽退、網路監控。 Layer-5
Transport Layer
傳輸層
資料傳輸錯誤的偵測和復原,資料封包的 重行排列。 Layer-4 Transport
傳輸層
(Host-to-Host)
TCP UDP
Network Layer
網路層
定義虛擬電路的建立、維持和終止,封包交換的路由選擇、擁塞控制等。 Layer-3 Network
網路層
(Internet)
        ICMP
IP
  ARP   OSPF RIP
Data Link Layer
資料連結層
定義把傳輸資料分裝成資料封包的規範, 檢查資料傳輸中是否有錯誤發生,執行資料傳送中的流量控制及鏈路管理。 Layer-2 Link
連結層
(Network Interface)
LLC
(Logical Link Control)
MAC
(Media Access Control)
Physical Layer
實體層
定義實際傳輸資料的硬體設備的規範,像是纜線規格、接頭尺寸、信號電壓、資料傳輸時序等等。 Layer-1

實體連線

伊 發表在 痞客邦 留言(0) 人氣()

程式語言命名慣例

Visual Basic:

Visual Basic命名慣例是使用:匈牙利命名法、PascalCasing、camelCasing。

匈牙利命名法:原則將名稱分為兩個部份,字首3個字母小寫為變數之型別,字尾為變數的意義以大小寫混用取名。例:Dim strUserName As String = "Allen",Dim intAge As Integer = 20。

PascalCasing命名法:每個字的第一個字元為大寫,例如:FirstName、LastName。

camelCasing命名法:第一個字元為小寫,例如:firstName、lastName。

※Visual Basic變數名稱不分大小寫,編輯器會自動依據宣告時的大小寫樣式自動變更使用者輸入的變數大小寫。

Visual Basic命名習慣:

Global變數會在名稱前加上「g_」,例如: g_strUserName。

Module或Class內的變數,習慣在名稱前加上「m_」,例如: m_strUserName。


以下轉貼自:http://victorgau.blogspot.com/2009/01/java-c.html

JAVA 跟 C# 的命名慣例

JAVA:

大致上命名的慣例比 C# 統一,大概是下面這樣。

Packages(套件):
使用小寫字母。例如:java.io.*。

Classes(類別):
每一個英文單字的第一個字母大寫。例如:MyClass。

Methods(方法), Attributes(屬性), Variables(變數):
除了第一個英文單字外,每一個英文單字的第一個字母大寫。
例如:myMethod, myAttribute, myVariable。

C#:

C#命名方式彈性比較大,但是不建議傳統的 Windows Programming 中使用的匈牙利式命名法。
C#的慣例大概是使用 Pascal Casing 跟 Camel Casing。

Pascal Casing:所有英文單字的第一個字母都是大寫,其他字母小寫。例如:MyClass。

Camel Casing 指的是,除了第一個英文單字外,所有英文單字的第一個字母都是大寫,其他字母小寫。例如:myVariable。

哪些東西使用 Pascal Casing,哪些使用 Camel Casing 呢?

Pascal Casing:
Class/Struct, Interface, Enum values, Enum type, Events, Exception, Methods, Namespace, Property。
另外:
Interface 以大寫的 I 做為開頭。
Exception 類別以 Exception 做為結尾。
EventHandler 以 EventHandler 做結尾。

Camel Casing:
Public/Protected/private Fields, Parameters

有些人說 Public Fields 建議使用 Pascal Casing,我覺得自己跟自己的 Team 習慣就好了。

伊 發表在 痞客邦 留言(0) 人氣()

本文引用自yc421206-[C#.NET] 如何 使用 多執行緒 Thread / 跨執行緒 存取UI
本文引用自catyku-C# Thread應用

//前置動作
using System.Threading;
//Thread基本三步驟
//1.建立ThreadStart委派
ThreadStart myRun = new ThreadStart(RunSample01);
//2.建立Thread 類別
Thread myThread = new Thread(myRun);
//3.啟動執行緒
myThread.Start();
//步驟1.2可以合併
Thread myThread = new Thread(new ThreadStart(RunSample01));
//我在寫無窮回圈時,發現按[X]關閉Form,迴圈還是在背景執行,所以到MSDN找到已下解決方法。
/* 來自MSDN的說明...
* 執行緒不是背景執行緒就是前景執行緒。
* 背景執行緒和前景執行緒相同,唯一差別在於背景執行緒不會防止處理序終止。
* 一旦終止屬於處理序的所有前景執行緒之後,Common Language Runtime 就會結束處理序。
* 剩下的所有背景執行緒則會在尚未完成之前全部停止。
*/
//將thread設定為背景執行緒(如果設定為false,按[X]關閉Form,執行緒仍在背景繼續執行,故要設定為true。)

myThread.IsBackground = true;
//可以將thread宣告成Global變數,但是不能在此new
public Thread thread1;
//如果宣告成Global變數,記得在function內new thread
//傳值的範例
private void function() {
    threadClass1 obj = new threadClass1("thread1", 10);
    thread1 = new Thread(obj.runMe);
    thread1.IsBackground = true;
    thread1.Start();
}

//class別放錯地方了,要跟form class在同一層
class threadClass1
{
    private String title;
    private int i;
    public thread1(String title, int i)
    {
        this.title = title;
        this.i = i;
    }
    public void runMe()
    {
        Console.Write(title + ":開始 \r\n");
        System.Threading.Thread.Sleep(1000);
        for (int i = 0; i < this.i; i++)
        {
            Console.Write(title + "\r\n");
            System.Threading.Thread.Sleep(2000);
        }
        Console.Write(title + ":結束 \r\n");
        System.Threading.Thread.Sleep(1000);
    }
}
//用上面的code隨筆寫一個範例...按button時會new thread執行process,thread還沒執行完畢,不允許再new。
public Boolean flag=false;

private void button7_Click(object sender, EventArgs e)
{
    if (flag == false)
    {
        function();
        flag = true;
        return;
    }

    if (thread1.IsAlive) //如果thread 還存在(還沒執行完畢)
    {
        Console.Write("thread:還沒結束 \r\n");
        System.Threading.Thread.Sleep(1000);
    }
    else
    {
        function();
    }
}
//完整範例Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Thread t1,t2,t3;
        public Boolean flag=false;

        public Form1()
        {
            InitializeComponent();
        }

        private void RunSample01()
        {
            Console.WriteLine("建立了一個執行緒{0}", Thread.CurrentThread.ManagedThreadId);
            Thread.Sleep(1000);
        }

        private void RunSample02()
        {
            for (int i=0;;i++)
            {
                Console.WriteLine("執行緒{0}: 迴圈第{1}次執行", Thread.CurrentThread.ManagedThreadId, i+1);
                Thread.Sleep(500);
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //1.建立ThreadStart委派
            //ThreadStart myRun = new ThreadStart(RunSample01);
            //2.建立Thread 類別
            //Thread myThread = new Thread(myRun);
            //上述兩句可合併
            Thread myThread = new Thread(new ThreadStart(RunSample01));
            //3.啟動執行緒
            myThread.Start();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            //1.建立ThreadStart委派
            ThreadStart myRun = new ThreadStart(RunSample02);
            try
            {
                //2.建立Thread 類別
                Thread myThread = new Thread(myRun);
                /* 執行緒不是背景執行緒就是前景執行緒。
                 * 背景執行緒和前景執行緒相同,唯一差別在於背景執行緒不會防止處理序終止。
                 * 一旦終止屬於處理序的所有前景執行緒之後,Common Language Runtime 就會結束處理序。
                 * 剩下的所有背景執行緒則會在尚未完成之前全部停止。
                 */
                //設定為背景執行緒(如果設定為false,按[X]關閉Form,執行緒仍在背景繼續執行,故要設定為true。)
                myThread.IsBackground = true;
                //3.啟動執行緒
                myThread.Start();
            }
            catch (Exception)
            {
                //例外
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            thread1 obj = new thread1(textBox1.Text,10);
            Thread t = new Thread(obj.runMe);
            t.IsBackground = true;
            t.Start();
        }

        private void button4_Click(object sender, EventArgs e)
        {
            thread1 obj = new thread1("擦窗戶",10);
            t1 = new Thread(obj.runMe);
            t1.IsBackground = true;
            t1.Start();
        }

        private void button5_Click(object sender, EventArgs e)
        {
            thread1 obj = new thread1("掃地",10);
            t2 = new Thread(obj.runMe);
            t2.IsBackground = true;
            t2.Start();
        }

        private void button6_Click(object sender, EventArgs e)
        {
            try
            {
                if (t2.IsAlive) //如果thread t2 還存在(還沒執行完畢)
                {
                    Console.Write("掃地還沒結束不能拖地\r\n");
                    System.Threading.Thread.Sleep(1000);
                }
                else
                {
                    thread1 obj = new thread1("拖地", 10);
                    t3 = new Thread(obj.runMe);
                    t3.IsBackground = true;
                    t3.Start();
                }
            }
            catch (Exception)
            {
                MessageBox.Show("應該還沒掃地,所以出現錯誤!");
            }
        }

        private void button7_Click(object sender, EventArgs e)
        {
            if (flag == false)
            {
                fun();
                flag = true;
                return;
            }

            if (t3.IsAlive) //如果thread 還存在(還沒執行完畢)
            {
                Console.Write("thread:還沒結束 \r\n");
                System.Threading.Thread.Sleep(1000);
            }
            else
            {
                fun();
            }
        }
        
        private void fun()
        {
            thread1 obj = new thread1("thread", 10);
            t3 = new Thread(obj.runMe);
            t3.IsBackground = true;
            t3.Start();
        }
    }

    class thread1
    {
        private String title;
        private int i;
        public thread1(String title, int i)
        {
            this.title = title;
            this.i = i;
        }
        public void runMe()
        {
            Console.Write(title + ":開始 \r\n");
            System.Threading.Thread.Sleep(1000);
            for (int i = 0; i < this.i; i++)
            {
                Console.Write(title + "\r\n");
                System.Threading.Thread.Sleep(2000);
            } 
            Console.Write(title + ":結束 \r\n");
            System.Threading.Thread.Sleep(1000);
        }
    }

}

伊 發表在 痞客邦 留言(0) 人氣()

目標:
1.使用SqlDataSource與GridView製作不用撰寫程式碼之頁面。
2.使用Ajax元件讓網頁不閃爍。
3.使用GridView元件編輯功能,並附加使用者輸入資料之驗證功能。

目標1:使用SqlDataSource與GridView製作不用撰寫程式碼之頁面。
1.從工具箱拉出SqlDataSource元件,設定好資料來源
2.從工具箱拉出GridView元件,將資料繫結至SqlDataSource元件
3.勾選 啟用編輯(此步驟將自動產生編輯功能,不需撰寫程式碼)

目標2:使用Ajax元件讓網頁不閃爍。
1.從工具箱Ajax擴充功能中,拉出ScriptManager,放在頁面最上方
2.從工具箱Ajax擴充功能中,拉出UpdatePanel放置於頁面中央
3.將顯示資料的元件(此處為GridView)放置於UpdatePanel管制的範圍中
4.執行網頁換頁將不會產生閃爍(不會Reload網頁)

目標3:使用GridView元件編輯功能,並附加使用者輸入資料之驗證功能。
1.開啟GridView的SmartTag功能表,選擇編輯樣板
2.選擇EditItem Template(編輯時顯示的畫面)
(請注意,欲編輯的欄位需要先轉換成TemplateField)
3.預設的編輯模式時會出現的TextBox
4.此時我們增加兩個驗證元件於TextBox旁
RequiredFieldValidator: 必要輸入驗證控制項,意思就是檢查一定要有輸入
RangeValidator: 範圍檢查驗證控制項,意思就是檢查範圍,有蠻多屬性可以慢慢研究
5.分別設定自己想要的屬性
6.結束樣版編輯
7.執行結果

參考圖片:
GridViewEdit_Ajax_Validator_1.gif
GridViewEdit_Ajax_Validator_2.gif

伊 發表在 痞客邦 留言(0) 人氣()

從買第一台電腦開始,我的瀏覽器就是netscape,首頁也一直是Google,可是今年開始一切都變了,不知道哪天開始,netscape開啟Google就會當掉,而且我首頁就是Google,等於一開馬上當,都沒機會去修改首頁的設定,只好移除重新安裝,試過幾個方法,才真正確定是Google搞的鬼。
不知道Google大神在網頁多下了什麼功夫,讓我的瀏覽器竟然可以當掉。
由於netscape瀏覽網頁速度遠遠比IE快,安全性也比IE高,所以我非常愛用。
這下子可好了,叫我用IE開網頁慢到可以去買個便當回來~網頁剛好開啟,這也實在太慢了吧!只好下載Google瀏覽器,這總是有快了吧!但是惡夢還沒結束,Google瀏覽器跟我電腦內原本就安裝的[線上遊戲-CABAL]相衝,會導致雙雙當機,所以~當然不能放棄我玩了多年的online game囉!所以,Google瀏覽器~只好跟你說掰掰~解除安裝!
那問題還沒解決啊!變成現在我首頁不能使用Google,搜尋也不能用Google,非得用Google時必須開啟我最痛恨的IE。真的很想拜託Google團隊,把網頁修好一點吧!雖然netscape已經沒再更新了,但是也不用逼到讓他當掉吧!

中文Netscape瀏覽器下載網址(台灣mozilla網站): http://moztw.org/netscape/

伊 發表在 痞客邦 留言(0) 人氣()

asp.net 的圖表元件 chart,可能會遇上「執行 ChartImg.axd 的子要求時發生錯誤」的error...

解決方法就是在web.config裡面,找到以下兩項做修改:(加上POST)

tag:httpHandlers中
add name="ChartImageHandler" preCondition="integratedMode" verb="POST,GET,HEAD" path="ChartImg.axd"


tag:handlers中
add path="ChartImg.axd" verb="POST,GET,HEAD" type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler,...



VS2008 ASP.NET GridView 使用編輯模式時,如何驗證使用者輸入的資料。
1.請編輯樣板,將驗證元件拉進去、放好、設定好,即可,一行程式都不用寫。
2.寫程式方法驗證...(待補)

怕驗證元件搞亂版面嗎?可以將static設成dynamic,這樣它就不會預留空白了。
而且一次可以放好幾個驗證元件: 辨別空白、辨別數字、日期、啥的...可以都塞進去。



關於錯誤訊息: The temp directory in chart handler configuration is not accessible

引用
http://geekswithblogs.net/naijacoder/archive/2009/01/05/128387.aspx


One error i came across was : The temp directory in chart handler configuration is not accessible
And what it is when you look in to your web.config you will find this TAG in the appSettings:

<add key="ChartImageHandler" value="Storage=file;Timeout=20;Url=~/tempImages/;"/>



When you drag the Chart control into design mode it adds the tag above to the web.config and you shoud have a folder called TempImages.

You get the error when its trying to right or modify that folder and all you need is to give the folder the right access.

On my Vista machine i just gave COMPNAME\Users write and modify access and bingo it worked

 



將ASP.NET編譯成完全看不到程式碼的狀態(包含aspx,aspx.vb,都看不到程式碼)
aspnet_compiler -p "來源實體路徑" -v / 目標實體路徑



ASP.NET實現 Ajax技術
現在Ajax好像很夯,但是想要白手起家,寫一段Ajax功能,實在光想就累人。
ASP.NET有一個好用的東西,可以拉拉元件就實現Ajax功能。
使用:VS開發環境中的Ajax擴充功能,一行程式碼都不用寫,就讓網頁擁有Ajax功能囉!



Treeview元件常用設定:

'清除所有節點
myTreeview.Nodes.Clear()

'動態新增節點
myTreeview.Nodes.Add(New TreeNode("1"))

'設定滑鼠click節點時觸動的事件:此處設定不做任何動作
myTreeview.Nodes(myTreeview.Nodes.Count - 1).SelectAction = TreeNodeSelectAction.Expand

'動態新增子節點
myTreeview.Nodes(myTreeview.Nodes.Count - 1).ChildNodes.Add(New TreeNode("1-1"))
myTreeview.Nodes(myTreeview.Nodes.Count - 1).ChildNodes.Add(New TreeNode("1-2"))
myTreeview.Nodes(myTreeview.Nodes.Count - 1).ChildNodes.Add(New TreeNode("1-3"))

'動態新增節點
myTreeview.Nodes.Add(New TreeNode("2"))

'設定滑鼠click節點時觸動的事件:此處設定連結到指定網址
myTreeview.Nodes(myTreeview.Nodes.Count - 1).NavigateUrl = "xxx.aspx"

'動態新增子節點
myTreeview.Nodes(myTreeview.Nodes.Count - 1).ChildNodes.Add(New TreeNode("2-1"))

'動態新增節點
myTreeview.Nodes.Add(New TreeNode("3"))

'動態新增子節點
myTreeview.Nodes(myTreeview.Nodes.Count - 1).ChildNodes.Add(New TreeNode("3-1"))

'動態新增節點
myTreeview.Nodes.Add(New TreeNode("4"))
...(以下略)



系統常數:
vbCrLf 等於 Chr(13) + Chr(10),即換行字元
vbCr 等於 Chr(13),即換行字元
vbLf 等於 Chr(10),即換行字元
vbNewLine 等於 Chr(13) + Chr(10),即換行字元
vbNullChar 等於 Chr(0),即空字元
vbNullString 長度為 0 的字串,即空字串
vbObjectError 錯誤代碼 -2147221504,使用者自訂的錯誤代碼須大於。
vbTab 等於 Chr(9),即 [Tab] 字元。
vbBack 等於 Chr(8),即 [BackSpace] 字元。



常用基本SQL語法:(括弧[]代表選擇性字串)
select * from 資料表 [where 欄位='value']
update set 欄位='value'[, 欄位='value'] [where 欄位='value']
insert into 資料表(欄位[,欄位]) values('value'[,'value'])



問題:
動態增加DropDownList是用以下程式碼...
DropDownList.Items.add("string")
但這樣加進去的item,value跟text都一樣
有沒有辦法把text跟value分開呢?

解答:
C#是寫成
this.DropDownList.Items.Add(new ListItem(這裏是Text, 這裏是Value));
VB是寫成
DropDownList.Items.add(New ListItem(這裏是Text, 這裏是Value))



問題:
請問如何使用 HyperLinkField 來做 EMail 的連結?下面的寫法好像會有問題:
DataNavigateUrlFields="email"
DataNavigateUrlFormatString="mailto:{0}"
HeaderText="信箱"

解答:
因為安全性的因素,必須將其轉換成 TemplateField:

<asp:TemplateField>
    <ItemTemplate>
        <asp:HyperLink runat=server Text="信箱"
            NavigateUrl='<%# Eval("email", "mailto:{0}") %>' />
    </ItemTemplate>
</asp:TemplateField>

 


伊 發表在 痞客邦 留言(0) 人氣()

我想大家應該都有聽MP3的習慣吧~~~或許說,這已經是無可缺少的休閒了^-^

不久前接觸了一種新的音樂格式APE,不同於mp3的壓縮格式,APE是以WAV直接壓縮的音樂格式,它能夠完整保存CD音軌的資料流,雖然檔案比MP3大一點點,不過~還原後的音質真是無話可說的好,完全不失真,這對貓耳朵、愛音樂的大家,是一大貢獻呀!

市面上的音樂播放軟體並不支援APE格式,而首選的播放軟體我選擇foobar2000,這個軟體的製作者也是winamp的製作者,對於APE格式的還原它做的很好,而且對mp3格式的音樂檔案,播放出來的音效也是無話可說的好(真是的,我詞窮了^^;),一般音樂播放軟體無法還原的mp3資料流,foobar2000都能完整還原,呈現給聽者更好的音樂享受。

若你喜歡聽mp3,foobar2000絕對是你最好的選擇。

 

 

PS. 這篇文章寫的不太流利,因為是一時興起寫的,請各為多多包涵 /(^o^)/

伊 發表在 痞客邦 留言(0) 人氣()

木馬病毒 JAVA_BYTEVER


解決方案:
1.關閉[系統還原]
2.使用掃毒軟體,並選擇刪除所有感染的檔案
3.重新設定IE網際網路選項
4.重新設定Microsoft Outlook


詳細內容:

1.Windows XP disables the System Restore feature:
關閉 Windows XP 系統還原服務

1.1 Log on as Administrator.
請用電腦管理員身分登入系統

1.2 Right-click the My Computer icon on the desktop and click Properties.
Click the System Restore tab.
在[桌面]->[我的電腦]點選滑鼠右鍵,選擇[內容]
點選[系統還原]的頁面

1.3 Select Turn off System Restore.
Click Apply > Yes > OK.
選擇關閉系統還原(若你有多顆硬碟或磁區,請把所有的系統還原都關閉)
選擇[OK]

Continue with the scan/clean process. Files under the _Restore folder can now be deleted.
Re-enable System Restore by clearing Turn off System Restore.
確定系統還原關閉後,就可以繼續使用掃毒軟體掃毒,所有被系統還原保護的病毒檔都可以被掃毒軟體刪除掉了。
等掃毒完畢,確定清理乾淨後,再重新啟動您的系統還原即可。


2.Running Trend Micro Antivirus
執行掃毒程式

Scan your system with Trend Micro antivirus and delete all files detected as JAVA_NEEDY.A. To do this, Trend Micro customers must download the latest pattern file and scan their system. Other Internet users can use HouseCall, Trend Micro’s free online virus scanner.
使用掃毒程式掃描你的電腦,並且選擇刪除所有感染的檔案。
若是使用趨勢的掃毒軟體,需要先下載新的病毒更新碼,再掃描你的系統。
若沒有安裝掃毒軟體,可以連上趨勢科技用線上掃毒。


3.Resetting Internet Explorer Homepage and Search Page
重新設定IE網際網路選項

This procedure restores the Internet Explorer homepage and search page to the default settings.
這個設定將會重設IE的首頁跟預設搜尋的頁面。

3.1 Close all Internet Explorer windows.
首先關閉所有IE的視窗

3.2 Open Control Panel. Click Start>Settings>Control Panel.
開啟[控制台]。
[開始]->[設定]->[控制台]

3.3 Double-click the Internet Options icon.
雙擊滑鼠左鍵開啟[網際網路選項]

3.4 In the Internet Properties window, click the Programs tab.
Click the “Reset Web Settings…” button.
開啟[程式]頁面,點擊[重設網頁設定]的按鈕。

3.5 Select “Also reset my home page.” Click Yes.
Click OK.
選擇[重設我的首頁],按[OK]。


::: Locating a Malware File :::

Right-click Start then click Search… or Find… depending on your version of Windows.
In the Named input box, type:
C:\331983981.DAT; C:\FILE9999.CHK
In the Look In drop-down list, select the drive which contains Windows, then press Enter.


4.Changing the Signature of Microsoft Outlook Express
更改Microsoft Outlook Express簽名檔

This procedure restores the signature of Microsoft Outlook Express.
這個設定將會重設Microsoft Outlook Express的簽名檔。

4.1 Open Microsoft Outlook Express.
開啟Microsoft Outlook Express

4.2 Click on Tools>Options. Click on the Signature Tab.
點選[工具]->[選項],到簽名檔那頁。

4.3 If the file chosen in the File text box below is equal to “s.htm” or some other undesired file, delete the entry in the textbox.
Click OK.
若發現簽名檔列表中有"s.htm"(或任何你是你建立的簽名檔檔案),請把他們通通刪除,按下[OK]。




因為我現在的電腦是windows 2000,所以沒辦法在抓其他的圖解,windows 2000沒有系統還原,我的電腦也沒裝 Microsoft Outlook Express,如果有翻譯不清楚的地方,請多多包涵。希望可以幫你解決中毒問題。

以上資訊都是參考趨勢科技網站的資料。

伊 發表在 痞客邦 留言(0) 人氣()