zoukankan      html  css  js  c++  java
  • 轻量级的数据库访问类 041104版

    这次更新主要加入一个执行大sql的函数。因为发现同时执行两个大sql(2000行以上)的时候,经常性的超时,所以加入了一个切分大sql的函数。另外,对所有使用connection对象的地方进行了dispose。


    Public Class DataDriver

        
    Private Shared _connString As String

        
    Private Shared Function GetConnString()Function GetConnString() As String
            
    If (_connString Is NothingThen
                _connString 
    = System.Configuration.ConfigurationSettings.AppSettings("ConnectionString")
            
    End If
            
    Return _connString
        
    End Function


        
    '过滤单引号',防止sql注入攻击
        Public Shared Function DealSqlStr()Function DealSqlStr(ByVal strInput As StringAs String
            
    Dim strTemp As String
            strTemp 
    = strInput
            
    If (strTemp <> Nothing AndAlso strTemp.Length > 0Then
                strTemp 
    = strTemp.Replace("'""''")
            
    Else
                strTemp 
    = ""
            End If
            
    Return strTemp
        
    End Function


        
    '分页获取数据
        Public Shared Function GetPage(ByVal col As StringByRef table As StringByRef dt As System.Data.DataTable, Optional ByVal page As Integer = 1Optional ByVal condition As String = ""Optional ByVal order As String = ""Optional ByVal pageSize As Integer = 20As Integer
            
    Dim sql As String = "Select " + col + " from " + table
            
    If (condition <> ""Then
                sql 
    += " where " + condition
            
    End If
            
    If (order <> ""Then
                sql 
    += " order by " + order
            
    End If
            
    Return GetPage(sql, dt, page, pageSize)
        
    End Function


        
    '分页获取数据
        Public Shared Function GetPage(ByVal sql As StringByRef dt As System.Data.DataTable, ByVal page As IntegerByVal pageSize As IntegerAs Integer
            
    Dim objConn As New SqlConnection(UtilTools.GetConnString())
            
    Dim objCmd As New SqlCommand("xp_GetPage", objConn)
            
    Dim ds As New DataSet
            
    Dim recordCount As Integer
            objCmd.CommandType 
    = CommandType.StoredProcedure
            objCmd.Parameters.Add(
    "@sql", sql)
            objCmd.Parameters.Add(
    "@page", page)
            objCmd.Parameters.Add(
    "@pageSize", pageSize)
            objCmd.Parameters.Add(
    "@needCount"1)
            
    Dim objDA As New SqlDataAdapter("", objConn)
            objDA.SelectCommand 
    = objCmd
            objDA.Fill(ds)
            dt 
    = ds.Tables(1)
            recordCount 
    = ds.Tables(2).Rows(0).Item(0)
            objCmd.Dispose()
            objConn.Dispose()
            
    Return recordCount
        
    End Function


        
    '获取单行数据
        Public Shared Sub GetOneRow(ByVal col As StringByVal table As StringByRef dr As System.Data.DataRow, Optional ByVal condition As String = "")
            
    Dim sql As String = "Select top 1 " + col + " from " + table
            
    If (condition <> ""Then
                sql 
    += " where " + condition
            
    End If
            GetOneRow(sql, dr)
        
    End Sub


        
    '获取单行数据,如统计值等
        Public Shared Sub GetOneRow(ByVal sql As StringByRef dr As System.Data.DataRow)
            
    Dim dt As New DataTable
            GetRows(sql, dt)
            
    If (dt.Rows.Count > 0Then
                dr 
    = dt.Rows(0)
            
    Else
                dr 
    = Nothing
            
    End If
        
    End Sub


        
    '获取多行数据
        Public Shared Sub GetRows(ByVal sql As StringByRef dt As System.Data.DataTable)
            
    Dim objConn As New SqlConnection(UtilTools.GetConnString())
            
    Dim objDA As New SqlDataAdapter(sql, objConn)
            objDA.Fill(dt)
            objConn.Dispose()
            objDA.Dispose()
        
    End Sub


        
    '执行sql语句
        Public Shared Sub ExecuteSql(ByVal sql As String)
            
    Dim objConn As New SqlConnection(UtilTools.GetConnString())
            
    Dim objCmd As New SqlCommand(sql, objConn)
            
    Try
                objConn.Open()
                objCmd.ExecuteNonQuery()
            
    Catch ex As System.data.sqlclient.SqlException
                
    Throw ex
            
    Finally
                objConn.Close()
                objConn.Dispose()
                objCmd.Dispose()
            
    End Try
        
    End Sub


        
    '执行大sql语句,传入为StringBuilder以提高效率。
        Public Shared Sub ExecuteBigSql(ByRef sbSql As System.Text.StringBuilder, Optional ByVal startWord As String = "insert into"Optional ByVal groupNumber As Integer = 500)
            
    Dim str As String
            
    Dim bGoOn As Boolean = True
            
    Dim iStart As Integer = 0
            
    Dim iNext As Integer = 0
            
    str = sbSql.ToString()
            
    While (bGoOn)
                iStart 
    = iNext
                
    For i As Integer = 0 To groupNumber
                    iNext 
    = str.IndexOf(startWord, iNext)
                    
    If (iNext < 0Then
                        bGoOn 
    = False
                        
    Exit For
                    
    Else
                        iNext 
    += startWord.Length
                    
    End If
                
    Next
                
    If (iNext >= 0Then
                    iNext 
    -= startWord.Length
                
    End If

                
    If (iNext > 0Then
                    ExecuteSql(
    str.Substring(iStart, iNext - iStart))
                
    Else
                    ExecuteSql(
    str.Substring(iStart))
                
    End If
            
    End While
        
    End Sub

    End Class


    该部分代码为完全代码,以前版本请参考:
    http://www.cnblogs.com/squirrel_sc/archive/2004/09/27/47049.html

    ---------------------------

    http://www.cnblogs.com/squirrel_sc

    1. 如有引用,请包含本段文字及原始出处。以表示对作者的尊重,且能将有相似想法的人联系起来。

    2. 如无特殊说明,本文的文字代表作者的观点和想法。由于人类的记忆和连通性的限制,可能会将别人的观点和想法当成自己的(会尽量避免,但我读书少,别蒙我:D);或有人会有同样的想法(那就太好了)。若有此类情况,请联系我。我会很高兴更新内容。

    3. 每篇文章会根据反馈或新的想法,随时更新。我会尽量记得更新版本号。

  • 相关阅读:
    MySQL数据库to_char() to_date()
    爬虫的基本要求和考核标准
    打印MySQL操作错误
    暖通施工时遇到大梁不需要打洞,开小孔的三通时无需放样
    CAD 图纸上的实体的扩展数据不能记数据库中的ID 因为数据库数据删除时,ID也被删除,这样就找不到该实体的信息了
    关于定时关机的命令 shutdown s t 30 at 12:00 shutdown s
    下次坐飞机时,我要揣个弹弓进去, 因为我要去完成我小时候想完成而没能完成的梦想
    CAD 块与块相交,交点在块的边界上,不在块内的某实体上
    豆奶粉干吃好吃
    CAD 我们用弧度时 不要去定义Pi是多少,用Math.Pi
  • 原文地址:https://www.cnblogs.com/squirrel_sc/p/60447.html
Copyright © 2011-2022 走看看