' Delete a row from a table.
Public Sub DeleteRow( _
ByVal connectionString As String, _
ByVal tableName As String, _
ByVal schema As String, _
ByVal columnDataInfoList _
As System.Collections.Generic.IList( _
Of Microsoft.Web.Management.DatabaseManager.ColumnDataInfo)) _
Implements Microsoft.Web.Management.DatabaseManager.IDbTableDataManager.DeleteRow
' Create a new string builder for the SQL statement.
Dim whereText As StringBuilder = New StringBuilder
' Create a connection to the database.
Dim connection As OleDbConnection = New OleDbConnection(connectionString)
' Create database command object.
Dim command As OleDbCommand = New OleDbCommand
' Specify the command type.
command.Connection = connection
command.CommandType = CommandType.Text
Dim whereClause As String = CreateWhereClause(columnDataInfoList, command, False)
' Construct the DELETE query.
command.CommandText = String.Format("DELETE FROM {0} WHERE {1}", EscapeName(tableName), whereClause)
' Open the database connection.
connection.Open()
' Run the query.
ExecuteNonQuery(connection, command)
' Close the database connection.
connection.Close()
End Sub
...
Friend Shared Function EscapeName(ByVal name As String) As String
' Test if the value is already escaped.
If (name.StartsWith("[", StringComparison.Ordinal) AndAlso name.EndsWith("]", StringComparison.Ordinal)) Then
' Return the string with no changes.
Return name
End If
' Create a new string builder for the escaped string.
Dim escapedName As StringBuilder = New StringBuilder
' Prepend the string with an opening bracket.
escapedName.Append(Microsoft.VisualBasic.ChrW(91))
' Loop through the string.
Dim i As Integer = 0
Do While (i < name.Length)
Dim c As Char = name(i)
If (c = Microsoft.VisualBasic.ChrW(93)) Then
escapedName.Append(Microsoft.VisualBasic.ChrW(93))
End If
escapedName.Append(c)
i = (i + 1)
Loop
' Append the string with an opening bracket.
escapedName.Append(Microsoft.VisualBasic.ChrW(93))
' Return the escaped string.
Return escapedName.ToString
End Function
...
' Run a transactional query.
Private Function ExecuteNonQuery( _
ByVal connection As OleDbConnection, _
ByVal command As OleDbCommand) As Integer
' Begin a transaction.
Dim transaction As OleDbTransaction = connection.BeginTransaction
' Specify the transaction for the command.
command.Transaction = transaction
Try
' Run the query.
Dim records As Integer = command.ExecuteNonQuery
' Test for the number of affected rows.
If (records > 1) Then
' Throw an error if more than one row was affected.
Dim e As InvalidOperationException = New InvalidOperationException
e.Data("RowsAffected") = records
Throw e
End If
' Commit the transaction.
transaction.Commit()
' Return the count of affected records.
Return records
Catch ex As Exception
' Roll back the transaction if en exception occurred
transaction.Rollback()
' Raise an exception when an error occured.
Throw New ProviderException(ex.Message)
End Try
End Function
...
Private Function CreateWhereClause( _
ByVal list As IList(Of ColumnDataInfo), _
ByVal command As OleDbCommand, _
ByVal includeModifiedColumnsOnly As Boolean) As String
' Create a new string builder for the SQL statement.
Dim whereClause As StringBuilder = New StringBuilder
For Each info As ColumnDataInfo In list
' Determine the OLEDB type for the column.
Dim dbType As OleDbType = StringToOleDbType(info.TypeInfo.ToString)
' Do not add binary fields.
If (dbType <> OleDbType.Binary) Then
' Do not include modified columns if the flag is set true
If (Not includeModifiedColumnsOnly _
OrElse info.IsEdited) Then
whereClause.Append(EscapeName(info.ColumnName))
If (info.OriginalValue Is Nothing) Then
whereClause.Append(" IS NULL AND ")
Else
whereClause.Append("=? AND ")
Dim param As OleDbParameter = command.CreateParameter
param.OleDbType = dbType
If (dbType = OleDbType.Guid) Then
' Convert the GUID string back to a GUID for the parameter.
param.Value = New Guid(info.OriginalValue.ToString)
Else
' Add the parameter value.
param.Value = GetDataValue(info.OriginalValue)
End If
command.Parameters.Add(param)
End If
End If
End If
Next
whereClause.Remove((whereClause.Length - 5), 5)
Return whereClause.ToString
End Function