加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – .Net ADO连接类

发布时间:2020-12-16 09:44:52 所属栏目:asp.Net 来源:网络整理
导读:我创建了一个连接类,它应该将数据表/ datareaders等返回到我的网页.我担心使用这个类不会正确关闭连接.这是班级: Imports Microsoft.VisualBasicNamespace myConnection Public Class DB Public Shared Function GetConnStr() Return "server=foobar" End F
我创建了一个连接类,它应该将数据表/ datareaders等返回到我的网页.我担心使用这个类不会正确关闭连接.这是班级:

Imports Microsoft.VisualBasic

Namespace myConnection
  Public Class DB

      Public Shared Function GetConnStr()
                    Return "server=foobar"
      End Function


      Public Shared Function OpenConn()
                    Return New System.Data.SqlClient.SqlConnection( GetConnStr )
      End Function

      Public Shared Function OpenReader(SQL As String)

                    Dim conn 
                    conn = OpenConn
                    conn.Open

                    Return New System.Data.SqlClient.SqlCommand(SQL,conn).ExecuteReader(System.Data.CommandBehavior.CloseConnection)

      End Function

      Public Shared Function OpenTable(SQL As String)

                    Dim conn 
                    conn = OpenConn
                    conn.Open

                    Dim dr As System.Data.SqlClient.SqlDataReader = New System.Data.SqlClient.SqlCommand(SQL,conn).ExecuteReader(System.Data.CommandBehavior.CloseConnection)
                    Dim dt As System.Data.DataTable = New System.Data.DataTable()
          dt.Load(dr)

                    Return dt 

      End Function

      Public Shared Function ExecuteSQL(SQL As String)

                    Dim conn 
                    conn = OpenConn
                    conn.Open

                    Return New System.Data.SqlClient.SqlCommand(SQL,conn).ExecuteNonQuery()

      End Function


  End Class
End Namespace

以下是我使用它的方式:

rst = conn.OpenReader(SQL)
While rst.Read  
end while
rst.close

我担心一旦我投入生产,连接将无法正常关闭,我的网站将失败.我是.net的新手,这个班级背后的校长有什么不对吗?

解决方法

你是对的:你的连接不会以这种方式关闭.更糟糕的是,通过只为您的sqlcommand接受字符串,您可以打开自己的sql注入安全漏洞.作为更好的模式的一个例子,我用来填充数据表的代码看起来更像这样:

Public Function GetDataTable(ByVal sql As String,ByVal AddParameters As Action(Of SqlParameterCollection)) As DataTable
    Dim result As New DataTable()
    Using cn As SqlConnection = OpenConn(),_
          cmd As New SqlCommand(sql,cn)

        AddParameters(cmd.Parameters)

        Using rdr As SqlDataReader = cmd.ExecuteReader
            result.Load(rdr)
        End Using
    End Using
    Return result
End Function

然后我会调用这样的代码:

Dim data As DataTable = GetDataTable("SELECT * FROM SomeTable WHERE ID= @ID",_ 
       Sub(p)
           p.Add("@ID",SqlDbType.Int).Value = 12345
       End Sub )

对于SqlDataReader,我在C#中有类似的代码,但是它需要使用迭代器块,并且该功能不适用于几周前用于Visual Studio 2010和Async CTP的服务包仅为just added to VB.Net.这里要带走的重要一点是我使用Using块正确封装了sql连接,代码鼓励正确使用查询参数.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读