The PIT
Röster från ITM-koncernen.

Tips och tricks i VB, MSSQL och Visual Studio

October 1, 2008 11:07 by Stefan Karlsson

Man lär sig nya saker varje dag. Ibland saker som funnits framför en hela tiden utan att man vetat om det eller orkat ta reda på det. Så här kommer några tips och tricks över ett par av de lite mer dolda eller underanvända funktionerna som finns i VB, MSSQL och Visual Studio. 

Block selection

En funktion jag tycker är händig att ha är att hålla ner ALT när jag väljer text i editorn, då blir det “block selection” istället för “row selection”. Bra att ha i många fall.

image

Imports Aliases

Man kan använda imports ihop med ett alias, antar att det är värdefullt om man har namespaces som krockar med varandra (Kommentera gärna om ni vet någon vettig anledning till att använda detta.)? Så här funkar det iaf:

Imports S = System.String
Public Class Form1    
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'dimensionera upp X som en system.string
        Dim x As S = "Hello"
        'Använda system.string utifrån aliases
        MsgBox(S.Format("Hello {0}", "Stefan"))
    End Sub
End Class

Catch when

Man kan lägga till filtrering vid Try/Catch, finurligt och ganska underskattad feature:

Imports System.IO
Imports System.IO.File
Imports System.IO.Path
Public Class Form1    
    Public Function ReadFile(ByVal FileNameAndPath As String, Optional ByVal bRetry As Boolean = False) As String
        Try
            Return ReadAllText(FileNameAndPath)
        Catch ex As FileNotFoundException When Not bRetry   'Prova igen, men bara en gång.   
            'Prova att leta efter filen i programkatalogen istället för medskickad path.
            Dim TryPath As String = My.Application.Info.DirectoryPath & "\" & GetFileName(FileNameAndPath)
            Return ReadFile(TryPath, True)
        Catch ex As IOException
            'Log exception
            Return Nothing
        End Try
    End Function
End Class

Using

För att säkerställa att objekt dispose:as m.m. så är Using bra att använda. Speciellt vid filhantering, comportsläsning, grafikobjektshantering m.m.

Using går att använda på alla typer som implementerar IDisposable.Dispose.

Public Class Form1
    Public Structure CustomerStruct
        Implements System.IDisposable
        Public FirstName As String
        Public LastName As String
        Public Age As Integer
        Private disposed As Boolean
        'Leker att customerstrukturen är IDisposable för att kunna använda using på Customerobjektet.
        Public Overloads Sub Dispose() Implements IDisposable.Dispose
            Dispose(True)
            GC.SuppressFinalize(Me)            
        End Sub
        Private Overloads Sub Dispose(ByVal disposing As Boolean)          
            If Not Me.disposed Then                
                ' Rensa upp unmanaged resurser här
                disposed = True
            End If
        End Sub
    End Structure
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Using MyForm As New Form
            MyForm.Text = "Nytt formulär"
            MyForm.FormBorderStyle = Windows.Forms.FormBorderStyle.FixedDialog
            If MyForm.ShowDialog(Me) = Windows.Forms.DialogResult.OK Then
                'Wee, användaren klickade OK
            Else
                'Attans, användaren klickade inte OK!
            End If
        End Using
        Using MyCustomer As New CustomerStruct With {.FirstName = "Stefan", .LastName = "Karlsson", .Age = 39}
        End Using
    End Sub
End Class

sp_msforeachtable

Riktigt trevlig funktion i MSSQL som gör att man kan köra ett kommando för varje tabell i databasen. I nedanstående rad så ersätts alltså frågetecknet med tabellnamnet. Så med en enda rad kan man loopa igenom alla tabeller och t.ex. som i nedanstående fall hämta en rad från varje tabell.

exec sp_msforeachtable "select top 1 * from ?"

Utöver sp_msforeachtable finns även sp_foreachdb som gör samma sak fast går igenom alla databaser på servern.

EXEC master..xp_fixeddrives

Ta reda på vilken hårddisk som har mest uttrymme kanske kan vara händigt?

Exempel på resultat:

drive MB free    
----- -----------
C     24757
E     8217

(2 row(s) affected)

Döda alla connections till en databas

Use Master
Go
Declare @dbname sysname
Set @dbname = 'name of database you want to drop connections from'
Declare @spid int
Select @spid = min(spid) from master.dbo.sysprocesses
where dbid = db_id(@dbname)
While @spid Is Not Null
Begin        
     Execute ('Kill ' + @spid)        
     Select @spid = min(spid) from master.dbo.sysprocesses        
     where dbid = db_id(@dbname) and spid > @spid
End

Tipsa!

tipsa gärna om fler saker.


Tags:
Categories: Programmering | Tips
Actions: E-mail | Permalink | Comments (0) | Comment RSSRSS comment feed