打开/关闭sql连接 - 冗余代码

时间:2012-10-09 13:43:11

标签: sql database vb.net

我想知道避免以下情况的最基本方法是什么。

    con.ConnectionString = connection_String
    con.Open()
    cmd.Connection = con

    'database interaction here

    cmd.Close()

我一直在我的项目中制作这些线条,但我认为必须有更好的方法来节省一遍又一遍地输入。它使代码看起来比现在更加邋!!

结束这一点,对我来说效果很好。谢谢你的帮助:)

Public Sub connectionState()
    If con.State = 0 Then
        con.ConnectionString = connection_String
        con.Open()
        cmd.Connection = con
    Else
        con.Close()
    End If
End Sub

3 个答案:

答案 0 :(得分:2)

您可以尝试创建一个类(单例类),并在该类中编写数据库连接语法代码和异常,然后将一个对象调用到主类以创建数据库连接,这是性能的最佳方式并保持在...上编写相同的代码...

答案 1 :(得分:2)

这是许多程序员想要创建一个“数据库层”的地方,其中包含方法签名的变体,如下所示:

Public DataSet ExecuteSQL(ByVal sql As String) As DataSet

这允许您在一个地方隔离所有样板连接代码。 sql命令字符串进入,数据出来。容易。

不要这样做!

这是朝着正确的方向前进,但有一个非常大的缺陷:它强制你使用字符串操作将参数值替换为sql查询。这导致了可怕的SQL注入安全漏洞。

相反,请确保在方法中包含一些机制来单独提示sql参数。这通常以函数的附加参数的形式出现,并且可以像KeyValuePairs的数组一样简单。如果你对lambdas感到满意,我的首选模式如下:

Public Iterator Function GetData(Of T)(ByVal sql As String, ByVal addParameters As Action(Of SqlParameterCollection), ByVal translate As Func(Of IDatarecord, T)) As IEnumerable(Of T)
    Using cn As New SqlConnection("connection string"), _
          cmd As New SqlCommand(sql, cn)

        addParameters(cmd.Parameters)

        cn.Open()
        Using rdr As SqlDataReader = cmd.ExecuteReader()
            While rdr.Read()
                Yield(translate(rdr))
            End While
        End Using
    End Using
End Function

要调用该函数,您可以执行以下操作:

Dim bigCustomers = GetData("SELECT * FROM Customers WHERE SalesTotal > @MinSalesTotal", _
                   Sub(p) p.Add("@MinSalesTotal", SqlDbType.Decimal, 1000000), _
                   MyCustomerClass.FromIDataRecord)

答案 2 :(得分:0)

您可以使用using block,在处理结束时使用非管理对象上的execute dispose。

链接:http://msdn.microsoft.com/en-us/library/htd05whh(v=vs.80).aspx