[笔记系列] DataHelper.cs of VB.net with Oracle

Imports Microsoft.VisualBasicImports System.Collections.GenericImports System.Collections.ObjectModelImports System.DataImports System.Data.OracleClientImports System.DiagnosticsImports System.Web.ConfigurationImports log4netImports log4net.ConfigPublic NotInheritable Class DataHelper    Private mConnectionTimeout As Integer = 30    Private mExecutionTime As TimeSpan    Private mParameters As New ParameterCollection()    Public Sub New()    End Sub    Public Sub New(sql As String)        CommandText = sql    End Sub    Public Property ConnectionTimeout As Integer        Get            Return mConnectionTimeout        End Get        Set(value As Integer)            mConnectionTimeout = value        End Set    End Property    Public ReadOnly Property Connection As OracleConnection        Get            Dim conn As OracleConnection = New OracleConnection(WebConfigurationManager.ConnectionStrings("ConnStr").ConnectionString)            conn.Open()            Return conn        End Get    End Property    Public Property CommandText As String    Public ReadOnly Property RealCommandText As String        Get            Dim sql As String = CommandText            For Each parameter As OracleParameter In Parameters                Dim name As String = If(                    parameter.ParameterName.StartsWith(":"),                    parameter.ParameterName,                    ":" & parameter.ParameterName                )                Dim value As String = If(                    TypeOf parameter.Value Is Date,                    String.Format(                        "TO_DATE('{0}', '{1}')",                        CType(parameter.Value, Date).ToString("yyyy/MM/dd HH:mm:ss"), "yyyy/mm/dd hh24:mi:ss"                    ),                    String.Format("'{0}'", parameter.Value)                )                Dim pattern As String = String.Format("{0}(?=[\W])|{0}$", name)                sql = Regex.Replace(sql, pattern, value, RegexOptions.IgnoreCase)            Next            Return sql        End Get    End Property    Public Property ExecutionTime As TimeSpan        Get            Return mExecutionTime        End Get        Private Set(value As TimeSpan)            mExecutionTime = value            If value.TotalSeconds > 3.0R Then                LogManager.GetLogger("SqlOverTime").Warn(value.ToString + "秒" + RealCommandText)            End If        End Set    End Property    Public ReadOnly Property Parameters As ParameterCollection        Get            If (mParameters Is Nothing) Then                mParameters = New ParameterCollection()            End If            Return mParameters        End Get    End Property    Public ReadOnly Property SqlCommand As OracleCommand        Get            Dim cmd As New OracleCommand(CommandText)            cmd.CommandTimeout = ConnectionTimeout            cmd.Parameters.AddRange(Parameters.CopyToArray())            Return cmd        End Get    End Property    Public ReadOnly Property DataReader As OracleDataReader        Get            Try                Return GetDataReader(CommandBehavior.CloseConnection)            Catch                Throw            End Try        End Get    End Property    Public ReadOnly Property DataAdapter As OracleDataAdapter        Get            Try                Using cmd As OracleCommand = SqlCommand                    Return New OracleDataAdapter(cmd)                End Using            Catch                Throw            End Try        End Get    End Property    Public ReadOnly Property DataTable As DataTable        Get            Try                Using conn As OracleConnection = Connection                    Dim sw As New Stopwatch()                    sw.Start()                    Dim dt As New DataTable()                    Dim adapter As OracleDataAdapter = DataAdapter                    adapter.SelectCommand.Connection = conn                    adapter.Fill(dt)                    sw.Stop()                    ExecutionTime = sw.Elapsed                    Return dt                End Using            Catch                Debug.WriteLine("Error Sql:" & RealCommandText)                LogManager.GetLogger(Reflection.MethodBase.GetCurrentMethod().DeclaringType).Error("Error Sql:" & RealCommandText)                Throw            End Try        End Get    End Property    Public ReadOnly Property Count As Integer        Get            Try                Using conn As OracleConnection = Connection                    Using cmd As OracleCommand = SqlCommand                        Dim sw As Stopwatch = New Stopwatch()                        sw.Start()                        cmd.CommandText = String.Format(                            "SELECT COUNT(1) FROM ({0}) Count{1}",                            CommandText,                            New Random().Next(100, 999)                        )                        cmd.Connection = Connection                        Dim num As Integer = Convert.ToInt32(cmd.ExecuteScalar())                        Return num                    End Using                End Using            Catch                Debug.WriteLine("Error Sql:" & RealCommandText)                LogManager.GetLogger(Reflection.MethodBase.GetCurrentMethod().DeclaringType).Error("Error Sql:" & RealCommandText)                Throw            End Try        End Get    End Property    Public ReadOnly Property HasData As Boolean        Get            Try                Return 0 < Count            Catch                Throw            End Try        End Get    End Property    Public ReadOnly Property DataScalar As Object        Get            Try                Using conn As OracleConnection = Connection                    Using cmd As OracleCommand = SqlCommand                        Dim sw As Stopwatch = New Stopwatch()                        sw.Start()                        cmd.Connection = conn                        Dim o As Object = cmd.ExecuteScalar()                        sw.Stop()                        ExecutionTime = sw.Elapsed                        Return o                    End Using                End Using            Catch                Debug.WriteLine("Error Sql:" & RealCommandText)                LogManager.GetLogger(Reflection.MethodBase.GetCurrentMethod().DeclaringType).Error("Error Sql:" & RealCommandText)                Throw            End Try        End Get    End Property    Public Function GetDataReader(behavior As CommandBehavior) As OracleDataReader        Dim sw As New Stopwatch()        sw.Reset()        Dim conn As OracleConnection = Connection        Dim cmd As OracleCommand = SqlCommand        Try            cmd.Connection = conn            Dim dr As OracleDataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection Or behavior)            sw.Stop()            ExecutionTime = sw.Elapsed            Return dr        Catch            cmd.Dispose()            If (conn.State = ConnectionState.Open) Then                conn.Close()                conn.Dispose()            End If            Debug.WriteLine("Error Sql:" & RealCommandText)            LogManager.GetLogger(Reflection.MethodBase.GetCurrentMethod().DeclaringType).Error("Error Sql:" & RealCommandText)            Throw        End Try    End Function    Public Function ExecuteNonQuery() As Integer        Try            Dim sw As New Stopwatch()            sw.Start()            Using conn As OracleConnection = Connection                Using cmd As OracleCommand = SqlCommand                    cmd.Connection = conn                    Dim count As Integer = cmd.ExecuteNonQuery()                    sw.Stop()                    ExecutionTime = sw.Elapsed                    Return count                End Using            End Using        Catch            Debug.WriteLine("Error Sql:" & RealCommandText)            LogManager.GetLogger(Reflection.MethodBase.GetCurrentMethod().DeclaringType).Error("Error Sql:" & RealCommandText)            Throw        End Try    End Function    Public Function ExecuteOracleNonQuery(ByRef rowID As String) As Integer        Try            Dim sw As New Stopwatch()            sw.Start()            Using conn As OracleConnection = Connection                Using cmd As OracleCommand = SqlCommand                    cmd.Connection = conn                    Dim count As Integer = cmd.ExecuteOracleNonQuery(rowID)                    sw.Stop()                    ExecutionTime = sw.Elapsed                    Return count                End Using            End Using        Catch            Debug.WriteLine("Error Sql:" & RealCommandText)            LogManager.GetLogger(Reflection.MethodBase.GetCurrentMethod().DeclaringType).Error("Error Sql:" & RealCommandText)            Throw        End Try    End Function    Public Sub Reset()        ConnectionTimeout = 30        CommandText = String.Empty        Parameters.Clear()    End Sub    Public Class ParameterCollection        Inherits Collection(Of OracleParameter)        Protected Overloads Sub Add(ByVal ParamArray params() As OracleParameter)            For Each p As OracleParameter In params                MyBase.Add(p)            Next        End Sub        Public Overloads Sub Add(name As String, value As Object)            If (value Is Nothing) Then                Throw New ArgumentException("栏位" & name & "不可为Nothing")            End If            MyBase.Add(New OracleParameter(name, value))        End Sub        Public Overloads Sub Add(name As String, value As Object, dbType As OracleType)            If (value Is Nothing) Then                Throw New ArgumentException("栏位" & name & "不可为Nothing")            End If            Dim p As New OracleParameter(name, dbType)            p.Value = value            MyBase.Add(p)        End Sub        Public Overloads Function CopyToArray() As OracleParameter()            Dim collection As New ParameterCollection()            For Each oldParameter As OracleParameter In Me                Dim newParameter As New OracleParameter()                newParameter.Direction = oldParameter.Direction                newParameter.IsNullable = oldParameter.IsNullable                newParameter.OracleType = oldParameter.OracleType                newParameter.ParameterName = oldParameter.ParameterName                newParameter.Size = oldParameter.Size                newParameter.SourceColumn = oldParameter.SourceColumn                newParameter.SourceColumnNullMapping = oldParameter.SourceColumnNullMapping                newParameter.SourceVersion = oldParameter.SourceVersion                newParameter.Value = oldParameter.Value                collection.Add(newParameter)            Next            Return collection.ToArray()        End Function    End ClassEnd Class//=============================================================//使用方法//=============================================================        //Select服用,得DataTable        Dim helper As New DataHelper()        helper.CommandText = <s><![CDATA[         SELECT * FROM         你的table        WHERE table的参数 = :参数        ]]></s>.Value.Replace(vbLf, vbCrLf)        helper.Parameters.Clear()        helper.Parameters.Add("参数", 要输入的参数)        Dim dt As DataTable = helper.DataTable()                                //Insert Update Delete服用,不会回传东西,直接执行        Dim helper As New DataHelper()        helper.CommandText = <s><![CDATA[         SELECT * FROM         你的table        WHERE table的参数 = :参数        ]]></s>.Value.Replace(vbLf, vbCrLf)        helper.Parameters.Clear()        helper.Parameters.Add("参数", 要输入的参数)        helper.ExecuteNonQuery()                

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章