2007-12-18

.ASHX中下載檔案

context.Response.ContentType = "application/octet-stream"
 
dim FileName as String=mid(url, instrrev(url,"/")+1,url.Length-instrrev(url,"/"))
     dim wc as WebClient= new WebClient()    
     dim b as Byte() = wc.DownloadData(url)
     context.Response.AppendHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8))
     context.Response.OutputStream.Write(b,0,b.Length)

2007-11-14

Turn on WebBrowser design mode

First,  參考 Microsoft HTML Object Library
 
WB=WebBrowser
 
WB.DocumentText = "<html><body></body></html>"
  Dim doc As IHTMLDocument2 = WB.Document.DomDocument
  doc.designMode = "On"     ->Intelligence不會show出這個屬性, 應該是微軟刻意隱藏起來

2007-11-10

SCOPE_IDENTITY、IDENT_CURRENT and @@IDENTITY

SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY 是類似的函數,因為它們會傳回插入識別資料行的值。
IDENT_CURRENT 不受範圍和工作階段的限制;它只限於指定的資料表。IDENT_CURRENT 會傳回在任何工作階段和任何範圍中,產生給特定資料表的值。
SCOPE_IDENTITY 和 @@IDENTITY 會傳回目前工作階段任何資料表中所產生的最後一個識別值。不過,SCOPE_IDENTITY 會傳回只在目前範圍內插入的值;@@IDENTITY 不限於特定範圍。
例如,有 T1 和 T2 兩份資料表,T1 定義了 INSERT 觸發程序。當資料列插入T1 時,會引發觸發程序,且會在 T2 中插入一個資料列。這個狀況說明兩個範圍:在 T1 插入,以及觸發程序在 T2 插入。
假設 T1 和 T2 都有識別資料行,在 T1 的 INSERT 陳述式結束時,@@IDENTITY 和 SCOPE_IDENTITY 會傳回不同的值。@@IDENTITY 會傳回在目前工作階段中,跨越任何範圍所插入的最後一個識別資料行值。這是在 T2中插入的值。SCOPE_IDENTITY() 會傳回在 T1 中插入的 IDENTITY 值。這是相同範圍內所發生的最後一項插入。如果在範圍內的識別資料行執行任何 INSERT 陳述式之前叫用 SCOPE_IDENTITY() 函數,這個函數會傳回 Null 值。
失敗的陳述式和交易可能會變更資料表的目前識別,以及建立識別資料行值中的間距。識別值永遠不會回復,即使試圖將值插入資料表的交易未獲認可,也是如此。例如,如果 INSERT 陳述式因 IGNORE_DUP_KEY 違規而失敗,資料表的目前識別值仍會遞增。

資料庫有開啟複寫功能的要使用SCOPE_IDENTITY 才能傳回正確的值

2007-11-08

動態新增控制項與 ViewState

在 Page Init 事件中動態建立的控制項有辨法自行維護狀態,因為這些控制項在 PostBack 後會執行 LoadViewState 來還原控制項的狀態。不過我們來看一個案例,首先在頁面上放置一個 Button 做 PostBack 使用,然後在程式碼中 Page Init 事件中動態建立一個 Literal 控制項,並在頁面第一次執行時(判斷 Not IsPostBack) 設定 Literal.Text 初始值,然後把這個 Literal 控制項加入頁面。
    Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
        Dim oLiteral As New Literal()
        If Not Me.IsPostBack Then
            oLiteral.Text = "初始值"
        End If
        Me.Form.Controls.Add(oLiteral)
    End Sub
在上面的程式碼中,在面頁第一次執行時設定 Literal 的 Text 屬性值, 而按鈕 PostBack 後,理論上應該會由 ViewState 還原 Literal 的 Text 屬性值。可是實際執行時會發現,當 PostBack 時 Literal 的 Text 值不見了??
針對上面的問題,將程式碼做如下小修改,就是將 Literal 控制項加入頁面的動作往上移至設定 Literal 的 Text 屬性值之前。
    Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
        Dim oLiteral As New Literal()
        Me.Form.Controls.Add(oLiteral)
        If Not Me.IsPostBack Then
            oLiteral.Text = "初始值"
        End If
    End Sub
重新執行程式,你會發覺竟然按鈕 PostBack 後,Literal 的 Text 屬性值會被保留了。
為什麼會發生這種情形呢?這是因為 Literal 的 Text 屬性是直接存取 ViewState 的原因,當動態新增的控制項未被加入頁面中時,控制項本身是無法存取 ViewState 時,所以動態新增的 Literal 控制項,在未加入執行 Me.Form.Controls.Add(oLiteral) 加入頁面前,設定它的 Text 屬性值,是無法被存入 ViewState 中,也就導致為什麼 PostBack 時,Literal 的 Text 屬性值不會被保留的原因了。
所以結論是,動態建立的控制項,最好馬上執行 Controls.Add 先加入頁面中,再去設定它的相關屬性值,才不會發生設定的屬性值無法寫入 ViewState 的情形。

2007-11-07

動態新增User Control

WebUserControl MyControl = (WebUserControl)LoadControl("WebUserControl.ascx");
可是你會發現 VS.NET 的 IntelliSense 好像不認得我們的UserControl
按 [Control] + [J] 翻來翻去就是找不到我們的 UserControl
是因為ASP.Net2.0是用多組件 動態編譯而成 跟1.1都編譯在同一個組件不同
所以我們參考不到
雖然硬寫,也會過, 但如果你要參考UserControl時 其實可以 在 aspx 的頁面加上
<%@ Reference Control="~/WebUserControl.ascx" %>即可, 這時在 IDE 中 IntelliSense 就找的到囉~

2007-06-26

Control the scroll bar of DataGridView

Actually, control the CurrentCell position instead of scroll bar
P.S CurrentRow property is READONLY, so we have to use CurrentCell
 
EX.
DataGridView1.CurrentCell = DataGridView1.Item([ColumnIndex], [RowIndex])

2007-06-21

手動繫結combobox

Dim CountryArr As New ArrayList
Dim CountryName As String() = New String() {"N1","N2","N3"}
Dim CountryCode As String() = New String() {"C1","C2","C3"}
For i As Integer = 0 To UBound(CountryName)
      CountryArr.Add(New KeyValuePair(Of String, String)(CountryCode(i), CountryName(i)))
Next
With ComboBox
   .DataSource=CountryArr
   .DisplayMember = "value"
   .ValueMember = "key"
End With
取得SelectItem時..
CType(ComboCountry.SelectedItem, KeyValuePair(Of String, String)).Value  ==>顯示在畫面上的值
CType(ComboCountry.SelectedItem, KeyValuePair(Of String, String)).Key  ==>隱藏的value值


ComboBox1.DataSource = Ds.Tables(0)
ComboBox1.DisplayMember = "charName"
ComboBox1.ValueMember = "charID"
如果DrooDownStyle=DropDownList
ComboBox1.SelectedItem
ComboBox1.SelectedValue
如果DrooDownStyle=DropDown
ComboBox1.SelectedText
ComboBox1.SelectedValue

2007-06-06

RunDll32.exe

命令列:rundll32.exe user.exe,restartwindows  
  功能: 系統重啟  
  命令列:rundll32.exe user.exe,exitwindows
  功能: 關閉系統  
  命令列: rundll32.exe shell32.dll,Control_RunDLL
  功能: 顯示控制面板  
  命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,1
  功能: 顯示"控制面板-輔助選項-鍵盤"選項視窗  
  命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,2
  功能: 顯示"控制面板-輔助選項-聲音"選項視窗  
  命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,3
  功能: 顯示"控制面板-輔助選項-顯示"選項視窗  
  命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,4
  功能: 顯示"控制面板-輔助選項-滑鼠"選項視窗  
  命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,5
  功能: 顯示"控制面板-輔助選項-傳統"選項視窗  
  命令列: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl @1
  功能: 執行"控制面板-添加新硬體"嚮導。  
  命令列: rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL AddPrinter
  功能: 執行"控制面板-添加新印表機"嚮導。  
  命令列: rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,1
  功能: 顯示 "控制面板-添加/刪除程式-安裝/卸載" 面板。  
  命令列: rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,2
  功能: 顯示 "控制面板-添加/刪除程式-安裝Windows" 面板。
  命令列: rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,3
  功能: 顯示 "控制面板-添加/刪除程式-啟動盤" 面板。  
  命令列: rundll32.exe syncui.dll,Briefcase_Create
  功能: 在桌面上建立一個新的"我的公文包"。  
  命令列: rundll32.exe diskcopy.dll,DiskCopyRunDll
  功能: 顯示複製軟碟視窗  
  命令列: rundll32.exe apwiz.cpl,NewLinkHere %1
  功能: 顯示"建立快捷方式"的對話框,所建立的快捷方式的位置由%1參數決定。  
  命令列: rundll32.exe shell32.dll,Control_RunDLL timedate.cpl,,0
  功能: 顯示"日期與時間"選項視窗。  
  命令列: rundll32.exe shell32.dll,Control_RunDLL timedate.cpl,,1
  功能: 顯示"時區"選項視窗。  
  命令列: rundll32.exe rnaui.dll,RnaDial [某個撥號連接的名稱]
  功能: 顯示某個撥號連接的撥號視窗。如果已經撥號連接,則顯示目前的連接狀態的視窗。  
  命令列: rundll32.exe rnaui.dll,RnaWizard
  功能: 顯示"新建撥號連接"嚮導的視窗。  
  命令列: rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,0
  功能: 顯示"顯示屬性-背景"選項視窗。  
  命令列: rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,1
  功能: 顯示"顯示屬性-螢屏保護"選項視窗。
  命令列: rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,2
  功能: 顯示"顯示屬性-外觀"選項視窗。  
  命令列: rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,3
  功能: 顯示顯示"顯示屬性-屬性"選項視窗。
  命令列: rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL FontsFolder
  功能: 顯示Windows的"字體"檔案夾。  
  命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @3
  功能: 同樣是顯示Windows的"字體"檔案夾。  
  命令列: rundll32.exe shell32.dll,SHFormatDrive
  功能: 顯示格式化軟碟對話框。  
  命令列: rundll32.exe shell32.dll,Control_RunDLL joy.cpl,,0
  功能: 顯示"控制面板-遊戲控制器-一般"選項視窗。  
  命令列: rundll32.exe shell32.dll,Control_RunDLL joy.cpl,,1
  功能: 顯示"控制面板-遊戲控制器-進階"選項視窗。  
  命令列: rundll32.exe mshtml.dll,PrintHTML (HTML文檔)
  功能: 列印HTML文檔。  
  命令列: rundll32.exe shell32.dll,Control_RunDLL mlcfg32.cpl
  功能: 顯示Microsoft Exchange一般選項視窗。  
  命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @0
  功能: 顯示"控制面板-滑鼠" 選項 。  
  命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @1
  功能: 顯示 "控制面板-鍵盤屬性-速度"選項視窗。  
  命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @1,,1
  功能: 顯示 "控制面板-鍵盤屬性-語言"選項視窗。  
  命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @2
  功能: 顯示Windows"印表機"檔案夾。  
  命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @3
  功能: 顯示Windows"字體"檔案夾。  
  命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @4
  功能: 顯示"控制面板-輸入法屬性-輸入法"選項視窗。  
  命令列: rundll32.exe shell32.dll,Control_RunDLL modem.cpl,,add
  功能: 執行"添加新調製解調器"嚮導。  
  命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,0
  功能: 顯示"控制面板-多媒體屬性-音頻"屬性頁。  
  命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,1
  功能: 顯示"控制面板-多媒體屬性-視頻"屬性頁。  
  命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,2
  功能: 顯示"控制面板-多媒體屬性-MIDI"屬性頁。  
  命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,3
  功能: 顯示"控制面板-多媒體屬性-CD音樂"屬性頁。
  命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,4
  功能: 顯示"控制面板-多媒體屬性-設備"屬性頁。  
  命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl @1
  功能: 顯示"控制面板-聲音"選項視窗。  
  命令列: rundll32.exe shell32.dll,Control_RunDLL netcpl.cpl
  功能: 顯示"控制面板-網路"選項視窗。  
  命令列: rundll32.exe shell32.dll,Control_RunDLL odbccp32.cpl
  功能: 顯示ODBC32資料管理選項視窗。  
  命令列: rundll32.exe shell32.dll,OpenAs_RunDLL {drive:\path\filename}
  功能: 顯示指定檔案(drive:\path\filename)的"打開方式"對話框。
  命令列: rundll32.exe shell32.dll,Control_RunDLL password.cpl
  功能: 顯示"控制面板-密碼"選項視窗。  
  命令列: rundll32.exe shell32.dll,Control_RunDLL powercfg.cpl
  功能: 顯示"控制面板-電源管理屬性"選項視窗。  
  命令列: rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL PrintersFolder
  功能: 顯示Windows"印表機"檔案夾。(同rundll32.exe shell32.dll,Control_RunDLL main.cpl @2)  
  命令列: rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,0
  功能: 顯示"控制面板-區域設置屬性-區域設置"選項視窗。
  命令列: rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,1
  功能: 顯示"控制面板-區域設置屬性-數字"選項視窗。  
  命令列: rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,2
  功能: 顯示"控制面板-區域設置屬性-貨幣"選項視窗。  
  命令列: rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,3
  功能: 顯示"控制面板-區域設置屬性-時間"選項視窗。  
  命令列: rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,4
  功能: 顯示"控制面板-區域設置屬性-日期"選項視窗。  
  命令列: rundll32.exe desk.cpl,InstallScreenSaver [螢屏保護檔案名]
  功能: 將指定的螢屏保護檔案設置為Windows的屏保,並顯示螢屏保護屬性視窗。  
  命令列: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,0
  功能: 顯示"控制面板-系統屬性-傳統"屬性視窗。
  命令列: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,1
  功能: 顯示"控制面板-系統屬性-設備管理器"屬性視窗。
  命令列: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,2
  功能: 顯示"控制面板-系統屬性-硬體配置檔案"屬性視窗。  
  命令列: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,3
  功能: 顯示"控制面板-系統屬性-性能"屬性視窗。  
  命令列: rundll32.exe user.exe,restartwindows
  功能: 強行關閉所有程式並重啟機器。  
  命令列: rundll32.exe user.exe,exitwindows
  功能: 強行關閉所有程式並關機。  
  命令列: rundll32.exe shell32.dll,Control_RunDLL telephon.cpl
  功能: 顯示"撥號屬性"選項視窗  
  命令列: rundll32.exe shell32.dll,Control_RunDLL themes.cpl
  功能: 顯示"桌面主旨"選項面板

Read Windows Registry

my.Computer.Registry.GetValue

2007-05-22

Date string for database

sql query中, 如果要insert或update特定的日期時間, 但是取得的日期變數是中文OS的format時, 要先將字串處理
 
dim DD as string ="2007/5/22 上午 03:44:21" 
"上午"或"下午"會造成sql query的轉換失敗
 
將變數代入sql query時要先將變數格式化
DD.ToString("yyyy/MM/dd hh:mm:ss") ->忽略上下午直接轉成12小時制
DD.ToString("yyyy/MM/dd HH:mm:ss") ->24小時制

2007-05-17

XML中的特殊字元處理

XML文件中有下述幾個字元是比較特殊的,所以當要使用該字元時必須以特別的符號來代替。
特殊字元
替代方法
『<』
因為 < 是標籤的第一個字元,所以『<』要以『&lt;』代替
『>』
因為 > 是標籤的最後一個字元,所以『>』要以『&gt;』代替
『"』
為了使屬性值的設定可以使用"符號,所以『"』要以『&quot;』代替
『’』
為了使屬性值的設定可以使用’符號,所以『』要以『&apos;』代替
『&』
因為&是上述每個代替符號的第一個字元,所以XML文件若要使用到符號&,則必需以『&amp;』來表式

2007-04-23

Change local CultureInfo

DefaultCultureInfo="en-US"
DefaultCultureInfo="zh-TW"
 
If System.Globalization.CultureInfo.CurrentCulture.Name <> GlobalVariable.DefaultCultureInfo Then
    System.Threading.Thread.CurrentThread.CurrentCulture = New System.Globalization.CultureInfo(GlobalVariable.DefaultCultureInfo, False)
End If

2007-04-11

Downloding progress of HTTPWebRequest

Dim Req As Net.HttpWebRequest = Net.WebRequest.Create(FilePath & FileName)
            Dim Res As Net.HttpWebResponse = Req.GetResponse
            Dim TotalSize As Integer = Res.ContentLength
            PB.Maximum = TotalSize
            Dim st As IO.Stream = Res.GetResponseStream
            Dim so As IO.Stream
            so = New IO.FileStream(FolderPath & FileName, IO.FileMode.Create)
            Dim DownloadedByte As Integer = 0
            Dim by(1024) As Byte
            Dim osize As Integer = st.Read(by, 0, by.Length)
            While osize > 0
                DownloadedByte = osize + DownloadedByte
                Application.DoEvents()
                so.Write(by, 0, osize)
                PB.Value = DownloadedByte
                LabelInfo.Text = DownloadedByte & " / " & TotalSize
                LabelInfo.Refresh()
                osize = st.Read(by, 0, by.LongLength)
            End While
            so.Close()
            st.Close()

2007-03-10

Prohibit application execute repeatly

Dim sAppName As String = Process.GetCurrentProcess.ProcessName
Dim Procs() As Process
Dim proc As Process
Procs = Process.GetProcesses()
Dim count As Integer = 0
For Each proc In Procs
  If proc.ProcessName.ToString.Equals("程式名稱") Then
    count += 1
  End If
Next proc
If count > 1 Then
  Application.Exit()
Else
  Application.Run(New 程式名稱())
End If

2007-03-01

找出windows己安裝的軟體

Dim InstalledApp As Object
Dim CurrentApp As Object  
   
 Dim str As String = "Office"  
 Dim GotIT As Boolean  = false
 Try  
     p_objSet = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2").ExecQuery("Select * from Win32_Product")   
     For Each CurrentApp In InstalledApp   
        If CurrentApp.name.ToString.IndexOf(str) >= 0 Then  
            GotIT = True  
            Exit For  
        End If  
     Next  
 Catch e As Exception   
     MessageBox.Show("WMI Exception" & vbcrlf & e.Message)   
 End Try 

2007-02-22

Operate XML

載入檔案
Dim XMLFileName As String = "File name here"
XMLDoc As New Xml.XmlDocument
XMLDoc.Load(XMLFileName)
 
取得節點
XMLNode As Xml.XmlNode
XMLNode = XMLDoc.SelectSingleNode("MakeMoneySystem/ShippingLabel")
p.s 如果node不存在, XMLNode=Nothing
 
新增節點
Dim root As Xml.XmlNode = XMLDoc.DocumentElement
Dim elem As Xml.XmlElement = XMLDoc.CreateElement("節點名稱")
elem.SetAttribute("屬性名稱", "值")
elem.InnerText = "節點值"
root.AppendChild(elem)
XMLDoc.Save(XMLFileName)
 
取得屬性值
XMLNode.Attributes.ItemOf("屬性名稱").Value
 
新增屬性
Dim NewAttr As Xml.XmlAttribute = XMLDoc.CreateAttribute("屬性名稱")
NewAttr.Value = "屬性值"
XMLNode.Attributes.SetNamedItem(NewAttr)
XMLDoc.Save(XMLFileName)

Get image from Web

Dim Req As Net.HttpWebRequest = Net.WebRequest.Create("Img Src")
Dim Res As Net.HttpWebResponse = Req.GetResponse
Dim TheStream As IO.Stream = Res.GetResponseStream()
Dim TheImg As Bitmap = New Bitmap(TheStream)
TheImg.Save("File name")
TheStream.Close()

2007-02-16

取得程式執行位置

在程式執行中 Application.StartupPath
在ApplicationEvents中 Application.Info.DirectoryPath

2007-02-12

Barcode notification

列印Barcode時, 在barcode的前後必需加上"*"做為開始及結束的符號("*"同時也需轉成barcode字型)
這樣列印出來的barcode才會掃得到
 
3 of 9字型尺寸
12 , 18 , 24 , 36 , 48 , 60 , 72

2007-02-02

跨執行緒存取控制項

您可以藉由將 CheckForIllegalCrossThreadCalls 屬性值設定為 false,停用這個例外狀況。這會造成您的控制項使用在 Visual Studio 2003 下執行的相同方式來執行。
Control.CheckForIllegalCrossThreadCalls = false

2007-01-22

Avoid illegal login

Request.ServerVariables("HTTP_REFERER")
Request.ServerVariables("SERVER_NAME")
compare these two variables

Parse HTML in AxWebBrowser

Dim TheURL As New Uri("URL string")
AxWebBrowser1.Navigate(TheURL)

釋放元件
AxWebBrowser1.Dispose()

以元件名字取得所開啟網頁內的元件
Imports mshtml
Dim e1 As Object = AxWebBrowser1.Document
Dim ebay As Object = e1.all
ebay.item("元件name").value
ebay.item("元件name").click()
…etc

解析HTML
Dim TheLength As Integer = ebay.length
Dim i As Integer
        For i = 0 To TheLength – 1
                If LCase(ebay.item(i).tagname) = "td" Then
                    If ebay.item(i).innertext = "Buyer Email" Then
                        ….
                    End If
                End If
            If LCase(ebay.item(i).tagname) = "b" Then
               Select Case ebay.item(i).uniqueID    ‘每一個TAG都有一個uniqueID, 以TAG的位置順序安排
                    Case "ms__id76"
                        TheEmailAddress = ebay.item(i).innertext
                    Case "ms__id80"
                        TheItemName = ebay.item(i).innertext
                End Select
              End If
        Next

判斷元件是否存在
IsNothing(ebay.item("元件name"))

元件陣列, 當網頁中有數個同名的元件時
ebay.item("元件name", 0).click()    ‘第一個
ebay.item("元件name", 1).click()     ‘第二個

Parse HTML in WebBrowser

Dim ebay As HtmlDocument = WebEBay.Document ‘宣告物件
Dim dhl As HtmlDocument = WebDHL.Document
 
ebay.GetElementById("sellernotes").GetAttribute("value")  ‘取得元素值
ebay.GetElementsByTagName("a").Count ‘文件中<a>的總數
ebay.GetElementsByTagName("a").Item(i).GetAttribute("href") ‘第i個<a>
dhl.GetElementById("txtCompanyName").SetAttribute("value", TheValue) ‘設定元素內的值
 
Dim TheLength As Integer = ebay.All.Count ‘取得整份文件長度
 
範例:某個元素內包含的文字
        If TheEmailAddress = "" Then
            For i = 0 To ebay.GetElementsByTagName("td").Count – 1
                If ebay.GetElementsByTagName("td").Item(i).InnerText = "Buyer Email" Then
                    TheEmailAddress = ebay.GetElementsByTagName("td").Item(i + 1).InnerText
                    Exit For
                End If
            Next
        End If
 
範例:觸發元素內的事件
Dim InputList As HtmlElementCollection = dhl.GetElementsByTagName("input")
        For i = 0 To InputList.Count – 1
            With InputList.Item(i)
                If .GetAttribute("type") = "radio" And .GetAttribute("name") = "dropoff" And .GetAttribute("value") = "1" Then
                    .SetAttribute("checked", "true")
                    .RaiseEvent("onclick")
                    Exit For
                End If
            End With
        Next
 
dhl.InvokeScript("setPickup") ‘呼叫文件內的Script
範列
Dim dhl As HtmlDocument = WebDHL.Document
        If dhl.GetElementById("dbxSvcType").GetAttribute("selectedindex") <> 5 Then
            If MsgBox("Not ship via Ground , Continue?", MsgBoxStyle.YesNo, "Warning") = MsgBoxResult.No Then Exit Sub
        End If
        dhl.InvokeScript("goForward_onNext", New String() {"document.frmShipment"})

將圖片存進DB中

Dim con As New SqlConnection _
       ("Server=YourServer;uid=<username>;pwd=<strong password>;database=northwind")
      Dim da As New SqlDataAdapter _
       ("Select * From MyImages", con)
      Dim MyCB As SqlCommandBuilder = New SqlCommandBuilder(da)
      Dim ds As New DataSet()
      da.MissingSchemaAction = MissingSchemaAction.AddWithKey
      Dim fs As New FileStream _
       ("C:\winnt\Gone Fishing.BMP", FileMode.OpenOrCreate, _
        FileAccess.Read)
      Dim MyData(fs.Length) As Byte
      fs.Read(MyData, 0, fs.Length)
      fs.Close()
      con.Open()
      da.Fill(ds, "MyImages")
      Dim myRow As DataRow
      myRow = ds.Tables("MyImages").NewRow()
      myRow("Description") = "This would be description text"
      myRow("imgField") = MyData
      ds.Tables("MyImages").Rows.Add(myRow)
      da.Update(ds, "MyImages")
      fs = Nothing
      MyCB = Nothing
      ds = Nothing
      da = Nothing
      con.Close()
      con = Nothing
      MsgBox ("Image saved to database")

從DB中取出圖片轉存

Dim con As New SqlConnection _
       ("Server=YourServer;uid= ;pwd=;database=northwind")
      Dim da As New SqlDataAdapter _
       ("Select * From MyImages", con)
      Dim MyCB As SqlCommandBuilder = New SqlCommandBuilder(da)
      Dim ds As New DataSet()
      con.Open()
      da.Fill(ds, "MyImages")
      Dim myRow As DataRow
      myRow = ds.Tables("MyImages").Rows(0)
      Dim MyData() As Byte
      MyData = myRow("imgField")
      Dim K As Long
      K = UBound(MyData)
      Dim fs As New FileStream _
       ("C:\winnt\Gone Fishing2.BMP", FileMode.OpenOrCreate, _
        FileAccess.Write)
      fs.Write(MyData, 0, K)
      fs.Close()
      fs = Nothing
      MyCB = Nothing
      ds = Nothing
      da = Nothing
      con.Close()
      con = Nothing
      MsgBox ("Image retrieved")