📄 c_sqlhelper.vb
字号:
Imports System.Data.OleDb
Imports System.Data
Imports System.Xml
'****************************************************************
' DHU
' Copyright (c) 2006 DHU.
'****************************************************************
'****************************************************************
'ファイル名 : C_SQLHelper.vb
'項目名称 : BAシステム
'機能概要 : 共通処理
' The SqlHelper class is intended to encapsulate high performance, scalable best practices for
' common uses of SqlClient.
'作成者 : WeiZY
'確認者 : WeiZY
'編集日付 : 2006.07.26
'修正者 : WeiZY
'修正日付 : 2006.8.30
'修正内容概要 :
'****************************************************************
' ===============================================================================
' Release history
' VERSION DESCRIPTION
' 2.0 Added support for FillDataset, UpdateDataset and "Param" helper methods
'
' ===============================================================================
Public NotInheritable Class SqlHelper
#Region "private utility methods & constructors"
' Since this class provides only static methods, make the default constructor private to prevent
' instances from being created with "new SqlHelper()".
Private Sub New()
End Sub ' New
' This method is used to attach array of oledbParameters to a oledbCommand.
' This method will assign a value of DbNull to any parameter with a direction of
' InputOutput and a value of null.
' This behavior will prevent default values from being used, but
' this will be the less common case than an intended pure output parameter (derived as InputOutput)
' where the user provided no input value.
' Parameters:
' -command - The command to which the parameters will be added
' -commandParameters - an array of oledbParameters to be added to command
Private Shared Sub AttachParameters(ByVal command As oledbCommand, ByVal commandParameters() As oledbParameter)
If (command Is Nothing) Then Throw New ArgumentNullException("command")
If (Not commandParameters Is Nothing) Then
Dim p As oledbParameter
For Each p In commandParameters
If (Not p Is Nothing) Then
' Check for derived output value with no value assigned
If (p.Direction = ParameterDirection.InputOutput OrElse p.Direction = ParameterDirection.Input) AndAlso p.Value Is Nothing Then
p.Value = DBNull.Value
End If
command.Parameters.Add(p)
End If
Next p
End If
End Sub ' AttachParameters
' This method assigns dataRow column values to an array of oledbParameters.
' Parameters:
' -commandParameters: Array of oledbParameters to be assigned values
' -dataRow: the dataRow used to hold the stored procedure' s parameter values
Private Overloads Shared Sub AssignParameterValues(ByVal commandParameters() As oledbParameter, ByVal dataRow As DataRow)
If commandParameters Is Nothing OrElse dataRow Is Nothing Then
' Do nothing if we get no data
Exit Sub
End If
' Set the parameters values
Dim commandParameter As oledbParameter
Dim i As Integer
For Each commandParameter In commandParameters
' Check the parameter name
If (commandParameter.ParameterName Is Nothing OrElse commandParameter.ParameterName.Length <= 1) Then
Throw New Exception(String.Format("Please provide a valid parameter name on the parameter #{0}, the ParameterName property has the following value: ' {1}' .", i, commandParameter.ParameterName))
End If
If dataRow.Table.Columns.IndexOf(commandParameter.ParameterName.Substring(1)) <> -1 Then
commandParameter.Value = dataRow(commandParameter.ParameterName.Substring(1))
End If
i = i + 1
Next
End Sub
' This method assigns an array of values to an array of oledbParameters.
' Parameters:
' -commandParameters - array of oledbParameters to be assigned values
' -array of objects holding the values to be assigned
Private Overloads Shared Sub AssignParameterValues(ByVal commandParameters() As oledbParameter, ByVal parameterValues() As Object)
Dim i As Integer
Dim j As Integer
If (commandParameters Is Nothing) AndAlso (parameterValues Is Nothing) Then
' Do nothing if we get no data
Return
End If
' We must have the same number of values as we pave parameters to put them in
If commandParameters.Length <> parameterValues.Length Then
Throw New ArgumentException("Parameter count does not match Parameter Value count.")
End If
' Value array
j = commandParameters.Length - 1
For i = 0 To j
' If the current array value derives from IDbDataParameter, then assign its Value property
If TypeOf parameterValues(i) Is IDbDataParameter Then
Dim paramInstance As IDbDataParameter = CType(parameterValues(i), IDbDataParameter)
If (paramInstance.Value Is Nothing) Then
commandParameters(i).Value = DBNull.Value
Else
commandParameters(i).Value = paramInstance.Value
End If
ElseIf (parameterValues(i) Is Nothing) Then
commandParameters(i).Value = DBNull.Value
Else
commandParameters(i).Value = parameterValues(i)
End If
Next
End Sub ' AssignParameterValues
' This method opens (if necessary) and assigns a connection, transaction, command type and parameters
' to the provided command.
' Parameters:
' -command - the oledbCommand to be prepared
' -connection - a valid oledbconnection, on which to execute this command
' -transaction - a valid oledbTransaction, or ' null'
' -commandType - the CommandType (stored procedure, text, etc.)
' -commandText - the stored procedure name or T-SQL command
' -commandParameters - an array of oledbParameters to be associated with the command or ' null' if no parameters are required
Private Shared Sub PrepareCommand(ByVal command As oledbCommand, _
ByVal connection As oledbconnection, _
ByVal transaction As oledbTransaction, _
ByVal commandType As CommandType, _
ByVal commandText As String, _
ByVal commandParameters() As oledbParameter, ByRef mustCloseConnection As Boolean)
If (command Is Nothing) Then Throw New ArgumentNullException("command")
If (commandText Is Nothing OrElse commandText.Length = 0) Then Throw New ArgumentNullException("commandText")
' If the provided connection is not open, we will open it
If connection.State <> ConnectionState.Open Then
connection.Open()
mustCloseConnection = True
Else
mustCloseConnection = False
End If
' Associate the connection with the command
command.Connection = connection
' Set the command text (stored procedure name or SQL statement)
command.CommandText = commandText
' If we were provided a transaction, assign it.
If Not (transaction Is Nothing) Then
If transaction.Connection Is Nothing Then Throw New ArgumentException("The transaction was rollbacked or commited, please provide an open transaction.", "transaction")
command.Transaction = transaction
End If
' Set the command type
command.CommandType = commandType
' Attach the command parameters if they are provided
If Not (commandParameters Is Nothing) Then
AttachParameters(command, commandParameters)
End If
Return
End Sub ' PrepareCommand
#End Region
#Region "ExecuteNonQuery"
' Execute a oledbCommand (that returns no resultset and takes no parameters) against the database specified in
' the connection string.
' e.g.:
' Dim result As Integer = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders")
' Parameters:
' -connectionString - a valid connection string for a oledbconnection
' -commandType - the CommandType (stored procedure, text, etc.)
' -commandText - the stored procedure name or T-SQL command
' Returns: An int representing the number of rows affected by the command
Public Overloads Shared Function ExecuteNonQuery(ByVal connectionString As String, _
ByVal commandType As CommandType, _
ByVal commandText As String) As Integer
' Pass through the call providing null for the set of oledbParameters
Return ExecuteNonQuery(connectionString, commandType, commandText, CType(Nothing, oledbParameter()))
End Function ' ExecuteNonQuery
' Execute a oledbCommand (that returns no resultset) against the database specified in the connection string
' using the provided parameters.
' e.g.:
' Dim result As Integer = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders", new oledbParameter("@prodid", 24))
' Parameters:
' -connectionString - a valid connection string for a oledbconnection
' -commandType - the CommandType (stored procedure, text, etc.)
' -commandText - the stored procedure name or T-SQL command
' -commandParameters - an array of SqlParamters used to execute the command
' Returns: An int representing the number of rows affected by the command
Public Overloads Shared Function ExecuteNonQuery(ByVal connectionString As String, _
ByVal commandType As CommandType, _
ByVal commandText As String, _
ByVal ParamArray commandParameters() As oledbParameter) As Integer
If (connectionString Is Nothing OrElse connectionString.Length = 0) Then Throw New ArgumentNullException("connectionString")
' Create & open a oledbconnection, and dispose of it after we are done
Dim connection As oledbconnection = Nothing
Try
connection = New oledbconnection(connectionString)
connection.Open()
' Call the overload that takes a connection in place of the connection string
Return ExecuteNonQuery(connection, commandType, commandText, commandParameters)
Finally
If Not connection Is Nothing Then connection.Dispose()
End Try
End Function ' ExecuteNonQuery
' Execute a stored procedure via a oledbCommand (that returns no resultset) against the database specified in
' the connection string using the provided parameter values. This method will discover the parameters for the
' stored procedure, and assign the values based on parameter order.
' This method provides no access to output parameters or the stored procedure' s return value parameter.
' e.g.:
' Dim result As Integer = ExecuteNonQuery(connString, "PublishOrders", 24, 36)
' Parameters:
' -connectionString - a valid connection string for a oledbconnection
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -