This is a collection of VB.Net code "snippets". A snippet is a short source code example of how to perform a specific task. Click on a entry to show the source code.
Database (ADO.Net)
+ How to Use DataColumn Expressions
Sub Expressions()
Dim con As New System.Data.oledb.OleDbConnection
Dim da As New System.Data.oledb.OleDbDataAdapter
Dim cmd As New System.Data.oledb.OleDbCommand
Dim dc As DataColumn
Dim ds As New DataSet
' connect to the database
con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=..\NorthWind.mdb"
cmd.Connection = con
da.SelectCommand = cmd
' fill the DataTable
cmd.CommandText = "Select * from Products"
da.Fill(ds, "Products")
' add on a few simple expression columns
dc = New DataColumn("UnitPriceX2")
dc.DataType = GetType(Double)
dc.Expression = "UnitPrice * 2" ' column and numeric constant
ds.Tables("Products").Columns.Add(dc)
dc = New DataColumn("TotalStock")
dc.DataType = GetType(Integer)
dc.Expression = "UnitsInStock + UnitsOnOrder" ' two column types
ds.Tables("Products").Columns.Add(dc)
dc = New DataColumn("Hello")
dc.DataType = GetType(String)
dc.Expression = "ProductName + ' Hello'" ' column and string constant
ds.Tables("Products").Columns.Add(dc)
End Sub
Active Directory (ADSI)
+ How to List All Users in an OU
Sub ListUsers(ByVal DOMAIN As String, ByVal OU As String)
' add a reference to System.DirectoryServices.dll
Dim srch As System.DirectoryServices.DirectorySearcher
Dim result As System.DirectoryServices.SearchResult
Dim de, dir As System.DirectoryServices.DirectoryEntry
de = New System.DirectoryServices.DirectoryEntry("LDAP://" & DOMAIN & "/" & OU)
srch = New System.DirectoryServices.DirectorySearcher(de)
' users require both "user" and "person" filters
srch.Filter = "(&(objectClass=user)(objectCategory=person))"
For Each result In srch.FindAll()
dir = result.GetDirectoryEntry
' Properties are case sensitive!
Debug.WriteLine(dir.Properties("distinguishedName").Value)
Next
End Sub
+ How to List All Computers in an OU
Sub ListComputers(ByVal DOMAIN As String, ByVal OU As String)
' add a reference to System.DirectoryServices.dll
Dim srch As System.DirectoryServices.DirectorySearcher
Dim result As System.DirectoryServices.SearchResult
Dim de, dir As System.DirectoryServices.DirectoryEntry
de = New System.DirectoryServices.DirectoryEntry("LDAP://" & DOMAIN & "/" & OU)
srch = New System.DirectoryServices.DirectorySearcher(de)
srch.Filter = "(ObjectCategory=computer)"
For Each result In srch.FindAll()
dir = result.GetDirectoryEntry
' Properties are case sensitive!
Debug.WriteLine(dir.Properties("CN").Value)
Next
End Sub
+ How to Find the Distinguish Name of an OU
Sub FindDNofOU(ByVal DOMAIN As String, ByVal OU As String)
' add a reference to System.DirectoryServices.dll
Dim entry, de As System.DirectoryServices.DirectoryEntry
Dim srch As System.DirectoryServices.DirectorySearcher
Dim result As System.DirectoryServices.SearchResult
Dim ldap As String
Dim i As Integer
ldap = "LDAP://" & DOMAIN
' is this already a fully qualified Distinguished Name?
If OU.ToUpper.StartsWith("OU=") Then
entry = New System.DirectoryServices.DirectoryEntry(ldap & "/" & OU)
ldap = entry.Path
Else
' if not, go find the full path
entry = New System.DirectoryServices.DirectoryEntry(ldap)
srch = New DirectoryServices.DirectorySearcher(entry)
' there may be more than one OU by that name!
i = 0
srch.Filter = "(OU=" & OU & ")"
For Each result In srch.FindAll()
ldap = result.Path
i += 1
Next
' how many did we find?
If i = 0 Then
Throw New Exception("Can't find OU '" & OU & "'")
End If
If i > 1 Then
Throw New Exception("Ambiguous search pattern, found " & i & " OUs named '" & OU & "'")
End If
End If
' do it again with the full path in place
entry = New System.DirectoryServices.DirectoryEntry(ldap)
srch = New DirectoryServices.DirectorySearcher(entry)
' so something here...
End Sub
+ How to Find the NETBIOS Name of a Domain
Sub FindNetBIOSName()
' add a reference to System.DirectoryServices.dll
Dim strDomain As String
Dim rootds, root, part, parts As System.DirectoryServices.DirectoryEntry
' get the root namespace
rootds = New System.DirectoryServices.DirectoryEntry("LDAP://rootDSE")
' get the name of the domain we're currently in
strDomain = rootds.Properties("DefaultNamingContext")(0)
parts = New System.DirectoryServices.DirectoryEntry("LDAP://CN=Partitions,CN=Configuration," _
& strDomain)
For Each part In parts.Children
' search the AD Configuration container for our domain name
If part.Properties("nCName")(0) = strDomain Then
' Properties are case sensitive!
MsgBox(part.Properties("nETBIOSName")(0))
Exit For
End If
Next
End Sub
Files and File System
+ How to Return File Version Information
Sub FileVer(ByVal file As String)
Dim fvi As FileVersionInfo
Dim ans As String
If System.IO.File.Exists(file) Then
' get the file version info
fvi = FileVersionInfo.GetVersionInfo(file)
If fvi.FileVersion <> "" Then
' we prefer this answer, if available
ans = fvi.FileVersion
Else
ans = fvi.FileMajorPart & "." & fvi.FileMinorPart & "." & fvi.FileBuildPart & "." & fvi.FilePrivatePart
End If
End If
MsgBox(ans)
End Sub
Security
+ How to Determine if the Current User in an Administrator
Imports System.Security.Principal
Function IsAdmin() As Boolean
Dim MyPrincipal As WindowsPrincipal
' set the stage by picking type of security principal
AppDomain.CurrentDomain.SetPrincipalPolicy(WindowsPrincipal)
' get the security principal for this thread
MyPrincipal = CType(System.Threading.Thread.CurrentPrincipal, WindowsPrincipal)
Try
If MyPrincipal.IsInRole(WindowsBuiltInRole.Administrator) Then
Return True
Else
Return False
End If
Catch
End Try
' if the built-in role doesn't exist... then report false
Return False
End Function
Windows Management Instrumentation (WMI)
+ How to Set the Default Printer
Sub SetDefaultPrinter(ByVal strPrinter As String)
' add a reference to System.Management
Dim wmi As System.Management.ManagementClass
Dim obj As System.Management.ManagementObject
Dim gotit As Boolean = False
wmi = New System.Management.ManagementClass("\root\cimv2:Win32_Printer")
For Each obj In wmi.GetInstances
If obj("Name") = strPrinter Then
' The SetDefaultPrinter method is new to WinXP/Win2003
obj.InvokeMethod("SetDefaultPrinter", Nothing)
gotit = True
End If
Next
If Not gotit Then
MsgBox("Hey, couldn't find a printer by that name!")
End If
End Sub
Exceptions and Event Logs
+ How to Retrieve Nested Error Messages
Try
' do something here
Catch ex As Exception
Dim msg As String = ""
While Not (ex Is Nothing)
msg &= ex.Message & vbCr
ex = ex.InnerException
End While
MsgBox(msg)
End Try
+ How to Write to the Eventlog
Try
' Do something
Catch ex As Exception
Dim el As New System.Diagnostics.EventLog
el.Source = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
el.WriteEntry("Yikes, couldn't open the log file!" & vbcr & ex.message, EventLogEntryType.Error)
Exit Sub
End Try
Other
+ How to Use VBScript inside VB.Net
Sub RunVBScript()
' Included a COM reference to "Microsoft Script Control" (MSScriptControl)
Dim host As New MSScriptControl.ScriptControlClass
host.Language = "VBScript"
host.AddCode("Sub main" & vbCr & "Msgbox(""Hello"")" & vbCr & "End Sub")
host.Run("main")
End Sub