将SqlDataAdapter连接到构造函数外部的SqlConnection

将SqlDataAdapter连接到构造函数外部的SqlConnection,sql,sql-server,vb.net,ado.net,Sql,Sql Server,Vb.net,Ado.net,在vb背景下自学ado.net 通过搜索各种代码示例,我能够编写一些东西,用sql从pubs数据库中提取一些数据。现在我正试图修改它以适应我的需要。因为我经常访问数据库,所以我希望避免一遍又一遍地重新创建对象(sqlconnection、sqldataadapter、dataset),而只在全局范围内创建一次。但它们似乎被设计成在需要使用它们的时候使用它们的构造函数来连续构建它们。我能找到一种方法来解决大部分问题,但我有几个地方卡住了 如何将SqlDataAdapter连接到其构造函数外部的Sq

在vb背景下自学ado.net

通过搜索各种代码示例,我能够编写一些东西,用sql从pubs数据库中提取一些数据。现在我正试图修改它以适应我的需要。因为我经常访问数据库,所以我希望避免一遍又一遍地重新创建对象(sqlconnection、sqldataadapter、dataset),而只在全局范围内创建一次。但它们似乎被设计成在需要使用它们的时候使用它们的构造函数来连续构建它们。我能找到一种方法来解决大部分问题,但我有几个地方卡住了

  • 如何将
    SqlDataAdapter
    连接到其构造函数外部的
    SqlConnection
  • 引用结果中特定“记录”的语法是什么,而不使用FOR EACH遍历结果
  • 这是我的代码(这段代码只是为了学习如何使用它,并不是为了实际应用)

    导入System.Data.SqlClient
    公共类SqlLink
    Dim conn作为新的SqlConnection
    Dim da作为新的SqlDataAdapter
    Dim ds作为新数据集
    公共函数Connect(ByVal sConnString作为字符串)作为整数
    '尝试连接到数据库,返回错误代码
    尝试
    conn.ConnectionString=sConnString
    康涅狄格州公开赛
    返回0
    特例
    MsgBox(错误描述)
    返回错误号
    结束尝试
    端函数
    公共子示例例程()
    将TempRow设置为DataRow
    '不希望Dim da作为新的sqlDataAdapter(“某些查询”,conn)
    “我不想把这里的da调暗。我要把它调暗一次
    “我怎样才能把da和它的构造器外面的控制室联系起来
    da.SelectCommand.CommandText=“从au\u fname类似“%ann%”的作者处选择au\u fname”
    da.填充(ds)
    对于ds.Tables(0.Rows)中的每个临时行
    MsgBox(临时名称)
    下一个
    da.SelectCommand.CommandText=“从au\u fname类似“%reg%”的作者处选择au\u fname”
    da.填充(ds)
    '如何获得特定的'记录',而无需使用FOR EACH循环
    '如果ds.Tables(0).Rows.Count>0,那么???
    端接头
    末级
    
    ==========================================================

    我想出了一个解决方案,但根据评论,我不知道是否有人想要或应该遵循它,但是。。最后,这就是我解决这个问题的方法。

    在连接功能中,在连接打开后,我添加了
    da=新的SqlDataAdapter(错误,连接)

    这创建了数据适配器的可重用全局实例。

    您可以设置SelectCommand的连接:

    da.SelectCommand.Connection = conn
    
    要获取表中的第一行,请执行以下操作:

    ds.Tables(0).Rows(0)
    
    您可以使用DataView进一步筛选数据集。在DefaultView的rowFilter属性中设置条件。然后,过滤器行处于DefaultView中

        ds.Tables(0).DefaultView.RowFilter = "<your conditions here>"
    
    ds.Tables(0.DefaultView.RowFilter=“”
    
    您可以设置SelectCommand的连接:

    da.SelectCommand.Connection = conn
    
    要获取表中的第一行,请执行以下操作:

    ds.Tables(0).Rows(0)
    
    您可以使用DataView进一步筛选数据集。在DefaultView的rowFilter属性中设置条件。然后,过滤器行处于DefaultView中

        ds.Tables(0).DefaultView.RowFilter = "<your conditions here>"
    
    ds.Tables(0.DefaultView.RowFilter=“”
    
    我希望这就是您想要的:)

    我讨厌不用打字的时候打字:

    Imports System.Data.SqlClient
    
    Module Module1
    
    Dim con As New SqlConnection
    Dim myConString As String = getSQLString()
    Dim objcommand As SqlCommand = New SqlCommand
    Dim cmd As SqlCommand
    Dim da As SqlDataAdapter
    Dim ds As DataSet
    
    Public Function getSQLString()
        Dim thisstring As String = "Server.... ur server"
        Return thisString
    End Function
    
    
    Public Function GetData(ByVal sqlstringtext As String)
    
        'Dim cmdText As String = "SELECT EquipList from SiteAuditor where client='" & GLClient & "' and market='" & GLMarket & "' and project='" & GLProject & "'"
        Dim conn As New SqlConnection(getSQLString())
        Dim strQ As String = String.Empty
        strQ = sqlstringtext
        cmd = New SqlCommand(strQ, conn)
        da = New SqlDataAdapter(cmd)
        ds = New DataSet
        da.Fill(ds)
    
        'we want to do this on close of program 
        'da = Nothing
        'ds = Nothing
        Return Nothing
    End Function
    
    
    'calling function you can do this whenever because we don't have to re-dim anything there being overridden
    Sub whatever()
    
        GetData("Select thisItem from thisTable where thiscondition='thiscondition")
        'first table'firstrow'firstrecord
        Dim specificRecord As String = ds.Tables(0).Rows(0).Item(0).ToString
    
    End Sub
    
    Sub formclosing()
        'we want to do this on close of program  ( the actual syntax for that would be .... 
        '
        'Private Sub Main_Closing(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
        'da = Nothing
        'ds = Nothing
        'Application.Exit()
        'End Sub
        '
    End Sub
    
    End Module
    

    编辑:如果您必须更改myconstring,您可以通过将其设置为公共btw或创建其自己的子例程来更改/重新命名它

    我希望这就是您要找的:)

    我讨厌不用打字的时候打字:

    Imports System.Data.SqlClient
    
    Module Module1
    
    Dim con As New SqlConnection
    Dim myConString As String = getSQLString()
    Dim objcommand As SqlCommand = New SqlCommand
    Dim cmd As SqlCommand
    Dim da As SqlDataAdapter
    Dim ds As DataSet
    
    Public Function getSQLString()
        Dim thisstring As String = "Server.... ur server"
        Return thisString
    End Function
    
    
    Public Function GetData(ByVal sqlstringtext As String)
    
        'Dim cmdText As String = "SELECT EquipList from SiteAuditor where client='" & GLClient & "' and market='" & GLMarket & "' and project='" & GLProject & "'"
        Dim conn As New SqlConnection(getSQLString())
        Dim strQ As String = String.Empty
        strQ = sqlstringtext
        cmd = New SqlCommand(strQ, conn)
        da = New SqlDataAdapter(cmd)
        ds = New DataSet
        da.Fill(ds)
    
        'we want to do this on close of program 
        'da = Nothing
        'ds = Nothing
        Return Nothing
    End Function
    
    
    'calling function you can do this whenever because we don't have to re-dim anything there being overridden
    Sub whatever()
    
        GetData("Select thisItem from thisTable where thiscondition='thiscondition")
        'first table'firstrow'firstrecord
        Dim specificRecord As String = ds.Tables(0).Rows(0).Item(0).ToString
    
    End Sub
    
    Sub formclosing()
        'we want to do this on close of program  ( the actual syntax for that would be .... 
        '
        'Private Sub Main_Closing(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
        'da = Nothing
        'ds = Nothing
        'Application.Exit()
        'End Sub
        '
    End Sub
    
    End Module
    

    编辑:如果您必须更改myconstring,您可以通过将其设置为public btw或创建自己的子例程来更改/重新命名它

    不要违背ADO.NET的预期流程。你会发现自己陷入比你预期的更多的麻烦中。一般来说,应该避免使用“全局性的”,除非它们提供了一些特殊的优势。与旧的COM环境不同,在.NET中,避免创建新对象没有特别的优势或效率。因此,除了连接对象(具有实际开销)之外,您不应该特意“缓存”Ado.net对象。(这有别于缓存数据)。史蒂夫,有点像不要嘲笑快乐的舞会,嗯?;)我明白你的意思,我有一种感觉,我构建的应用程序越多,它就越真实。Barry,我只是假设创建对象然后使用它们总比重用它们的开销要大得多。我使用create方法和“cached”方法对一个数据集进行了50k次的测试。虽然有差异,但只有1.6秒。我想我不会连续访问数据库50000次呵呵。。。因此,似乎为每个访问都重新创建它们是可以的。不要违背ADO.NET的预期流程。你会发现自己陷入比你预期的更多的麻烦中。一般来说,应该避免使用“全局性的”,除非它们提供了一些特殊的优势。与旧的COM环境不同,在.NET中,避免创建新对象没有特别的优势或效率。因此,除了连接对象(具有实际开销)之外,您不应该特意“缓存”Ado.net对象。(这有别于缓存数据)。史蒂夫,有点像不要嘲笑快乐的舞会,嗯?;)我明白你的意思,我有一种感觉,我构建的应用程序越多,它就越真实。Barry,我只是假设创建对象然后使用它们总比重用它们的开销要大得多。我使用create方法和“cached”方法对一个数据集进行了50k次的测试。虽然有差异,但只有1.6秒。我想我不会连续访问数据库50000次呵呵。。。因此,似乎在每次访问时都可以重新创建它们。谢谢用户2236967。。我可以叫你2吗?我感谢你的答复和你所做的工作