Oct 10, 2007

Set BMP file to Transparent


Set BMP file to Transparent


Imports System
Imports System.Collections
Imports System.ComponentModel
Imports System.Windows.Forms
Imports System.Data
Imports System.Configuration
Imports System.Resources
Imports System.Drawing
Imports System.Drawing.Drawing2D
Imports System.Drawing.Imaging

Public Class MainClass
    Shared Sub  Main()
        Dim  myform As Form = New TransparencyForm()
        Application.Run(myform)
    End Sub
End Class

Public Class TransparencyForm
    Inherits  System.Windows.Forms.Form

#Region " Windows Form Designer generated code "

    Public Sub  New()
        MyBase.New()

        'Th is call is required by the Windows Form Designer.
        InitializeComponent()

        'Ad d any initialization after the InitializeComponent() call
        Me.SetStyle(ControlStyles.ResizeRedraw , True)
        Me.SetStyle(ControlStyles.DoubleBuffer , True)
        Me.SetStyle(ControlStyles.AllPaintingInWmPaint , True)
    End Sub

    'Fo rm overrides dispose to clean up the component list.
    Protected  Overloads Overrides Sub  Dispose(ByVal disposing As  Boolean)
        If  disposing Then
            If  Not (components Is Nothing) Then
                components.Dispose()
            End If
        End If
        MyBase.Dispose(disposing)
    End Sub

    'Re quired by the Windows Form Designer
    Private  components As System.ComponentModel.IContainer

    'NO TE: The following procedure  is required by the Windows Form Designer
    'It  can be modified using the Windows Form Designer.  
    'Do  not modify it using the code editor.
    Friend WithEvents splitter2  As System.Windows.Forms.Splitter
    Friend WithEvents splitter1  As System.Windows.Forms.Splitter
    Friend WithEvents groupBox1  As System.Windows.Forms.GroupBox
    Friend WithEvents panel1  As System.Windows.Forms.Panel
    Friend WithEvents groupBox3  As System.Windows.Forms.GroupBox
    Friend WithEvents panel3  As System.Windows.Forms.Panel
    Friend WithEvents groupBox2  As System.Windows.Forms.GroupBox
    Friend WithEvents panel2  As System.Windows.Forms.Panel
    <System.Diagnostics.DebuggerStepThrough ()> Private Sub InitializeComponent()
        Me.splitter2 = New System.Windows.Forms.Splitter ()
        Me.splitter1 = New System.Windows.Forms.Splitter ()
        Me.groupBox1 = New System.Windows.Forms.GroupBox ()
        Me.panel1 = New System.Windows.Forms.Panel ()
        Me.groupBox3 = New System.Windows.Forms.GroupBox ()
        Me.panel3 = New System.Windows.Forms.Panel ()
        Me.groupBox2 = New System.Windows.Forms.GroupBox ()
        Me.panel2 = New System.Windows.Forms.Panel ()
        Me.groupBox1.SuspendLayout()
        Me.groupBox3.SuspendLayout()
        Me.groupBox2.SuspendLayout()
        Me.SuspendLayout()
        '
        'sp litter2
        '
        Me.splitter2.Location = New System.Drawing.Point (232 0)
         Me.splitter2.Name = "splitter2"
        Me.splitter2.Size = New System.Drawing.Size (3 102)
        Me.splitter2.TabIndex =  9
        Me.splitter2.TabStop = False
        '
        'sp litter1
        '
        Me.splitter1.Location = New System.Drawing.Point (229 0)
         Me.splitter1.Name = "splitter1"
        Me.splitter1.Size = New System.Drawing.Size (3 102)
        Me.splitter1.TabIndex =  6
        Me.splitter1.TabStop = False
        '
        'gr oupBox1
        '
        Me.groupBox1.Controls.AddRange (New System.Windows.Forms.Control() {Me.panel1})
        Me.groupBox1.Dock = System.Windows.Forms.DockStyle.Left
        Me.groupBox1.Location = New System.Drawing.Point (117 0)
         Me.groupBox1.Name = "groupBox1"
        Me.groupBox1.Size = New System.Drawing.Size (112 102)
        Me.groupBox1.TabIndex =  5
        Me.groupBox1.TabStop = False
        Me.groupBox1.Text =  "Original Colors"
        '
        'pa nel1
        '
        Me.panel1.BackColor = System.Drawing.Color.White
        Me.panel1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D
        Me.panel1.Dock = System.Windows.Forms.DockStyle.Fill
        Me.panel1.Location = New System.Drawing.Point (3 16)
         Me.panel1.Name = "panel1"
        Me.panel1.Size = New System.Drawing.Size (106 83)
        Me.panel1.TabIndex =  0
        '
        'gr oupBox3
        '
        Me.groupBox3.Controls.AddRange (New System.Windows.Forms.Control() {Me.panel3})
        Me.groupBox3.Dock = System.Windows.Forms.DockStyle.Fill
        Me.groupBox3.Location = New System.Drawing.Point (117 0)
         Me.groupBox3.Name = "groupBox3"
        Me.groupBox3.Size = New System.Drawing.Size (235 102)
        Me.groupBox3.TabIndex =  8
        Me.groupBox3.TabStop = False
        Me.groupBox3.Text =  "Made Transparent"
        '
        'pa nel3
        '
        Me.panel3.BackColor = System.Drawing.Color.White
        Me.panel3.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D
        Me.panel3.Dock = System.Windows.Forms.DockStyle.Fill
        Me.panel3.Location = New System.Drawing.Point (3 16)
         Me.panel3.Name = "panel3"
        Me.panel3.Size = New System.Drawing.Size (229 83)
        Me.panel3.TabIndex =  0
        '
        'gr oupBox2
        '
        Me.groupBox2.Controls.AddRange (New System.Windows.Forms.Control() {Me.panel2})
        Me.groupBox2.Dock = System.Windows.Forms.DockStyle.Left
         Me.groupBox2.Name = "groupBox2"
        Me.groupBox2.Size = New System.Drawing.Size (117 102)
        Me.groupBox2.TabIndex =  7
        Me.groupBox2.TabStop = False
        Me.groupBox2.Text =  "White Background"
        '
        'pa nel2
        '
        Me.panel2.BackColor = System.Drawing.Color.White
        Me.panel2.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D
        Me.panel2.Dock = System.Windows.Forms.DockStyle.Fill
        Me.panel2.Location = New System.Drawing.Point (3 16)
         Me.panel2.Name = "panel2"
        Me.panel2.Size = New System.Drawing.Size (111 83)
        Me.panel2.TabIndex =  0
        '
        'Tr ansparencyForm
        '
        Me.AutoScaleBaseSize = New System.Drawing.Size (5 13)
        Me.ClientSize = New System.Drawing.Size (352 102)
        Me.Controls.AddRange(New System.Windows.Forms.Control () {Me.splitter2, Me.splitter1, Me.groupBox1, Me.groupBox3, Me.groupBox2})
        Me.Name =  "TransparencyForm"
        Me.Text =  "TransparencyForm"
        Me.groupBox1.ResumeLayout(False)
        Me.groupBox3.ResumeLayout(False)
        Me.groupBox2.ResumeLayout(False)
        Me.ResumeLayout(False)

    End Sub

#End  Region


    Dim  backgroundString As String =  "a\n b\n c\n d\n e\n f\n g\n H \n"


    Private Sub  panel1_Paint(ByVal sender As  Object, ByVal e As  PaintEventArgs) Handles panel1.Paint
        Dim As Graphics = e.Graphics
        Dim  bmp As Bitmap = New Bitmap( "figure2.BMP")
        g.DrawString(backgroundString,  Me.Font, Brushes.Black, Me.ClientRectangle.Left, Me.ClientRectangle.Top)
        Dim  rect As Rectangle = New Rectangle( 0 0, bmp.Width, bmp.Height)
        rect.Offset((Me.panel1.ClientRectangle.Width  - rect.Width) / 2, (Me.panel1.ClientRectangle.Height  - rect.Height) / 2)
        g.DrawImage(bmp, rect)
    End Sub

    Private Sub  panel2_Paint(ByVal sender As  Object, ByVal e As  PaintEventArgs) Handles panel2.Paint
        Dim As Graphics = e.Graphics
        Dim  bmp As Bitmap = New Bitmap( "figure2.BMP")
        g.DrawString(backgroundString,  Me.Font, Brushes.Black, Me.ClientRectangle.Left, Me.ClientRectangle.Top)

        Dim  colorMap As ColorMap() = New ColorMap() {New ColorMap()}
        colorMap( 0).OldColor = bmp.GetPixel(0 , bmp.Height - 1 )
        colorMap( 0).NewColor = Color.White
        Dim  attr As ImageAttributes = New ImageAttributes()
        attr.SetRemapTable(colorMap)

        Dim  rect As Rectangle = New Rectangle( 0 0, bmp.Width, bmp.Height)
        rect.Offset((Me.panel1.ClientRectangle.Width  - rect.Width) / 2, (Me.panel1.ClientRectangle.Height  - rect.Height) / 2)
        g.DrawImage(bmp, rect)
    End Sub

    Private Sub  panel3_Paint(ByVal sender As  Object, ByVal e As  PaintEventArgs) Handles panel3.Paint
        Dim As Graphics = e.Graphics
        Dim  bmp As Bitmap = New Bitmap( "figure2.BMP")
        g.DrawString(backgroundString,  Me.Font, Brushes.Black, Me.ClientRectangle.Left, Me.ClientRectangle.Top)

        bmp.MakeTransparent(bmp.GetPixel (0, bmp.Height -  1))
        Dim  rect As Rectangle = New Rectangle( 0 0, bmp.Width, bmp.Height)
        rect.Offset((Me.panel1.ClientRectangle.Width  - rect.Width) / 2, (Me.panel1.ClientRectangle.Height  - rect.Height) / 2)
        g.DrawImage(bmp, rect)
    End Sub

    Private Sub  TransparencyForm_Layout(ByVal sender  As Object, ByVal e As  LayoutEventArgs) Handles MyBase.Layout
        panel1.Refresh()
        panel2.Refresh()
        panel3.Refresh()
    End Sub
End Class

 

Rotating an image around its center in .NET

Rotating an image around its center in .NET#

As you can see on the new screenshots for the WeFly247.NET Passenger website, there's a dynamic flightmap image displaying the route the plane has already traveled and where the plane is at now.

As I was replacing some hard-coded info (like the image to use for the map, the start- and endpoints of the flight on the map, ...), I figured I was also going to need to rotate the plane dynamically so that it would follow the path (I wouldn't feel too comfortable if I was looking at a flightmap where my plane seemed to fly sideways). Before that, I had just rotated the stat ic image itself, but if the flight path can change, so can the rotation.

There is an Image.Rotat eFlip method but that only allows rotating over 90/180/270 degrees. I also looked at some mat rix transformations on a Region object using Matrix.Rotate, but that seemed a little too hard to get working. Furthermore, I wanted to rotat e the plane around its center (not around the upper left corner as most rotations do) so I sat down and thought deeply about rot ation equations (so my math teacher was right, it does come in handy sometimes!), decided I forgot all about it (sorry teach), and looked it up again.

After rotating a point (x, y) around the origin over an angle a, the new coordinates (x', y') are:

x' = x cos(a) + y sin(a)
y' = -x sin(a) + y cos(a)

Now you can use a Graphics. DrawImage method overload to draw the image in a given parallelogram extrapolated from an array of three points. That would do just fine to rot ate the image if I could calculate the three points, which I could using the simple formulas above. So my final implementation to draw a rot ated image onto a graphics object became (beware: VB.NET snippet coming up ;-) ):

' Draws an image onto the given graphics object. The image is rot ated by a specified angle
' (in radians) around its center and then drawn at the given center point.
Private Sub DrawImageRot atedAroundCenter(ByVal g As Graphics, _
    ByVal center As Point, ByVal img As Image, ByVal angle As Double)

     ' Think of the image as a rectangle that needs to be drawn rotated.
     ' Rotate the coordinates of the rectangle's corners.
     Dim upperLeft As Point = RotatePoint(New Point(-img.Width / 2, img.Height / 2), angle)
     Dim upperRight As Point = RotatePoint(New Point(img.Width / 2, img.Height / 2), angle)
     Dim lowerLeft As Point = RotatePoint(New Point(-img.Width / 2, -img.Height / 2), angle)

     ' Create the points array by offsetting the coordinates with the center.
     Dim points() As Point = {upperLeft + center, upperRight + center, lowerLeft + center}
    
    ' Draw the rotated image.
    g.DrawImage(img, points)

End Sub

' Rotates a point around the origin by the specified angle (in radians).
' Rotation adheres to the following rules for the new coordin ates:
' x' = x cos(a) + y sin(a)
' y' = -x sin(a) + y cos(a)
Private Function RotatePoint( ByVal p As Point, ByVal angle As Double) As Point

     Dim x As Integer = p.X * Math.Cos(angle) + p.Y * Math. Sin(angle)
    Dim y As Integer = -p.X * Math. Sin(angle) + p.Y * Math.Cos(angle)

     Return New Point(x, y)

End Function

original source: http://jelle.druyts.net/2004/05/26/RotatingAnImageAroundItsCenterInNET.aspx

Measure the height and width of a string in VB.NET

Measure the height and width of a string in VB.NET

Use the Graphics.MeasureString method exposed by the PaintEventArgs parameter of a form or control's Paint event or the PrintPageEventArgs parameter of the PrintDocument object's PrintPage event.

MeasureString measures a string when drawn with a specified font and returns a SizeF structure which contains height and width values in pixels.

    Private Sub Form1_Paint(ByVal sender As Object, _
ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint

Dim myFont As New Font("Courier New", 8)
Dim myFontBold As New Font("Microsoft Sans Serif", 10, FontStyle.Bold)
Dim StringSize As New SizeF

StringSize = e.Graphics.MeasureString("How wide is this string?", myFont)
Debug.WriteLine("Height: " & StringSize.Height)
Debug.WriteLine("Width: " & StringSize.Width)

StringSize = e.Graphics.MeasureString("How wide is this string?", myFontBold)
Debug.WriteLine("Height: " & StringSize.Height)
Debug.WriteLine("Width: " & StringSize.Width)
End Sub

You can use MeasureString to calculate how many characters will fit within a specified StringFormat object. A StringFormat object encapsulates text layout information such as alignment and line spacing as well as font information.

    Private Sub Form1_Paint(ByVal sender As Object, _
ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint

Dim myFont As New Font("Courier New", 8)
Dim strString1 As String = "How wide is this string?"
Dim strString2 As String = "How much of this string will fit within strString1?"
Dim myFontBold As New Font("Microsoft Sans Serif", 10, FontStyle.Bold)
Dim StringSize As New SizeF
Dim LayoutArea As New SizeF
Dim NewStringFormat As New StringFormat
Dim intLinesFilled As Integer
Dim intCharactersFitted As Integer
'
' Measure string 1's height and width.
'
StringSize = e.Graphics.MeasureString(strString1, myFont)
'
' Create a StringFormat object specifying not to wrap text.
'
NewStringFormat.FormatFlags = StringFormatFlags.NoWrap
'
' Create a structure specifying the maximum layout area for the string. Set the
' width to the width of string 1 and the height to the textheight of the font used.
'
LayoutArea.Width = StringSize.Width
LayoutArea.Height = myFont.GetHeight(e.Graphics)
'
' See how many characters of string 2 fit within the layout area (width of string 1).
'
StringSize = e.Graphics.MeasureString(strString2, myFont, _
LayoutArea, NewStringFormat, intCharactersFitted, intLinesFilled)

Debug.WriteLine(intCharactersFitted)
End Sub

original source: http://www.thescarms.com/dotnet/MeasureString.aspx

Word Wrap Text

Word Wrap Text

The code listed below can be compiled as a class or can be added to a project. This code wraps text to a specified number of characters per line. It does this by using several api calls and a fixed width font. This method for wrapping text is much faster than any other code I have found on the internet. These are the necessary objects: one form called frmMain with txtbox on it called txtHidden, a module called modMainCode, and a class module called WordWrap


'modMainCode

Option Explicit

Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal msg As Long, ByVal wp As Long, lp As Any) As Long
Public Const EM_LINEINDEX = &HBB
Public Const EM_LINELENGTH = &HC1
Public Const EM_GETLINE = &HC4
Public Const EM_GETLINECOUNT = &HBA
Public Const EM_FMTLINES = &HC8



'frmMain

Option Explicit

Public intMaxLineLen As Integer
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal msg As Long, ByVal wp As Long, lp As Any) As Long
Private Const EM_LINEINDEX = &HBB
Private Const EM_LINELENGTH = &HC1
Private Const EM_GETLINE = &HC4
Private Const EM_GETLINECOUNT = &HBA
Private Const EM_FMTLINES = &HC8

'************************************************************************
'This sets up the textbox so it will wrap to the correct amount of
'characters
'************************************************************************
Private Sub SetUpRTB()
Dim lngIndex As Long
Dim intLength As Integer

intLength = 0
txtHidden.MultiLine = True
txtHidden.Font.Name = "Fixedsys"
txtHidden.Text = String(500, "W")
Do Until intLength = intMaxLineLen

txtHidden.Width = txtHidden.Width + 5
lngIndex = SendMessage(txtHidden.hWnd, _
EM_LINEINDEX, 1, 0)
intLength = SendMessage(txtHidden.hWnd , _
EM_LINELENGTH, lngIndex, 0)
Loop
txtHidden = ""
txtHidden.Visible = False

End Sub



Private Sub Form_Load()
SetUpRTB
End Sub


'WordWrap Class

Option Explicit



Public Function WordWrap(strText As String, intLineLen As Integer) As String
frmMain.intMaxLineLen = intLineLen
Load frmMain
WordWrap = GetText(strText)
End Function

'*************************************************************************************
'This function wraps a string by using apis and a textbox control(txtHidden)
'located on frmmain
'*************************************************************************************
Private Function GetText(strSource As String) As String
Dim lngCounter As Long
Dim lngLinecount As Long
Dim strHolder As String
Dim strLine As String
Dim lngCurrPos As Long, lngCurrPos2 As Long
Dim lngNextLen As Long
Dim lngtxtSize As Long

Dim intLength As Integer, intPrevLength As Integer
Dim lngCount As Long
Dim lngIndex As Long
Dim strBuf As String, strBufReplace As String


lngtxtSize = 65535 / ((2 / ((frmMain.intMaxLineLen + 1) / 2)) + 1)
strHolder = Space$(10000000)

lngNextLen = lngtxtSize
lngCurrPos = 1
lngCurrPos2 = 1
Do Until lngCurrPos >= Len(strSource)
If Len(strSource) - lngCurrPos < lngtxtSize Then
lngNextLen = Len(strSource) - lngCurrPos + 1
End If
frmMain.txtHidden = Mid(strSource, lngCurrPos, lngNextLen)
SendMessage frmMain.txtHidden.hWnd, EM_FMTLINES, True, 0

lngIndex = SendMessage(frmMain.txtHidden.hWnd, _
EM_LINEINDEX, 0, 0)
intLength = SendMessage(frmMain.txtHidden.hWnd, _
EM_LINELENGTH, lngIndex, 0)

If intLength + intPrevLength > frmMain.intMaxLineLen Then
strBuf = Space$(intLength + 1)
SendMessage frmMain.txtHidden.hWnd, EM_GETLINE, 0, ByVal strBuf
strBuf = Left$(strBuf, intLength)
strBufReplace = FixBuf(strBuf, intPrevLength)
frmMain.txtHidden = Replace$(frmMain.txtHidden, strBuf, strBufReplace, , 1)
SendMessage frmMain.txtHidden.hWnd, EM_FMTLINES, True, 0
End If


lngCount = SendMessage(frmMain.txtHidden.hWnd, _
EM_GETLINECOUNT, 0, 0)
lngIndex = SendMessage(frmMain.txtHidden.hWnd, _
EM_LINEINDEX, lngCount - 1, 0)
intPrevLength = SendMessage(frmMain.txtHidden.hWnd, _
EM_LINELENGTH, lngIndex, 0)

Mid$(strHolder, lngCurrPos2, Len(frmMain.txtHidden)) = frmMain.txtHidden

lngCurrPos2 = lngCurrPos2 + Len( frmMain.txtHidden)
lngCurrPos = lngCurrPos + lngNextLen
Loop
GetText = Replace$(Trim$(strHolder), vbCr & vbCr & vbLf, vbCrLf)
End Function

'****************************************************************************
'This function ensures that the first line of the text to be conconcatonated
'does not exceed the maximum line length when concatonated to the last line
'in the main string variable
'****************************************************************************
Private Function FixBuf(ByVal strText As String, intLen As Integer) As String
Dim intMaxLen As Integer
Dim i As Integer
Dim intlstSpace As Integer

intMaxLen = frmMain.intMaxLineLen - intLen

For i = 1 To intMaxLen
If Mid$(strText, i, 1) = Space$(1) Then
intlstSpace = i
End If

Next
If intlstSpace <> 0 Then
strText = Left$(strText, intlstSpace - 1) & vbCrLf & Right$(strText, Len(strText) - intlstSpace)
Else
strText = Left$(strText, intMaxLen) & vbCrLf & Right$(strText, Len(strText) - intMaxLen)
End If
FixBuf = strText
End Function
( orignal source: http://www.mredkj.com/vbquicktakes/WordWrap.html )

Get Textbox Line Count Using SendMessage Function In user32 Library

Get Textbox Line Count Using SendMessage Function In user32 Library

Const EM_GETLINECOUNT As Integer = &HBA

Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, _
ByVal lParam As Integer) As Integer

Trace.WriteLine(SendMessage(TextBox1.Handle, EM_GETLINECOUNT, 0, 0))

Oct 9, 2007

ADO.NET Overview

Imports System
Imports System.Data
Imports System.Data.SqlClient

namespace HowTo.Samples.ADONET

public class adooverview4
public shared sub Main()
Dim myadooverview4 as adooverview4
myadooverview4 = new adooverview4()
myadooverview4.Run()
end sub

public sub Run()
' Create a new Connection and SqlDataAdapter
Dim myConnection as SqlConnection
Dim mySqlDataAdapter as SqlDataAdapter
Dim workParam as SqlParameter


myConnection = new SqlConnection("server=(local)\NetSDK;Trusted_Connection=yes;database=northwind")
mySqlDataAdapter = new SqlDataAdapter("Select * from Region", myConnection)

' Restore database to it's original condition so sample will work correctly.
Cleanup()

' Build the insert Command
mySqlDataAdapter.InsertCommand = new SqlCommand("Insert into Region (RegionID, RegionDescription) VALUES (@RegionID, @RegionDescription)", myConnection)

workParam = mySqlDataAdapter.InsertCommand.Parameters.Add ("@RegionID", SqlDbType.Int)
workParam.SourceColumn = "RegionID"
workParam.SourceVersion = DataRowVersion.Current

workParam = mySqlDataAdapter.InsertCommand.Parameters.Add("@RegionDescription", SqlDbType.NChar, 50)
workParam.SourceVersion = DataRowVersion.Current
workParam.SourceColumn = "RegionDescription"

' Build the update command
mySqlDataAdapter.UpdateCommand = new SqlCommand("Update Region Set RegionDescription = @RegionDescription WHERE RegionID = @RegionID" , myConnection)

workParam = mySqlDataAdapter.UpdateCommand.Parameters.Add ("@RegionID", SqlDbType.Int)
workParam.SourceColumn = "RegionID"
workParam.SourceVersion = DataRowVersion.Original

workParam = mySqlDataAdapter.UpdateCommand.Parameters.Add("@RegionDescription", SqlDbType.NChar, 50)
workParam.SourceVersion = DataRowVersion.Current
workParam.SourceColumn = "RegionDescription"

Dim myDataSet as DataSet
myDataSet = new DataSet()

' Set the MissingSchemaAction property to AddWithKey because Fill will not cause primary key & unique key information to be retrieved unless AddWithKey is specified.
mySqlDataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey
mySqlDataAdapter.Fill(myDataSet, "Region")

Dim myDataRow1 as DataRow
myDataRow1 = myDataSet.Tables("Region").Rows.Find(2)
myDataRow1(1) = "Changed this region desc"

Dim myDataRow2 as DataRow
myDataRow2 = myDataSet.Tables("Region").NewRow()
myDataRow2(0) = 901
myDataRow2(1) = "A new region"
myDataSet.Tables("Region").Rows.Add(myDataRow2)

try
mySqlDataAdapter.Update(myDataSet, "Region")
Console.Write("Updating DataSet succeeded!")
catch e as Exception
Console.Write(e.ToString())
end try
end sub

public sub Cleanup()
Dim myConnection as SqlConnection = new SqlConnection("server=(local)\NetSDK;Trusted_Connection=yes;database=northwind")

try
' Restore database to it's original condition so sample will work correctly.
myConnection.Open()
Dim CleanupCommand as SqlCommand = new SqlCommand("DELETE FROM Region WHERE RegionID = '901'", myConnection)
CleanupCommand.ExecuteNonQuery()
catch e as Exception
Console.Write(e.ToString())
finally
myConnection.Close()
end try
end sub

end class

end namespace


( original source: http://samples.gotdotnet.com/quickstart/util/srcview.aspx?path=/quickstart/howto/samples/adoplus/adooverview4/adooverview4.src )