martes, 21 de febrero de 2017

Función Visual Basic .NET ejecuta cualquier instrucción SQL sin afectar a la base de datos SQL Server (SET FMTONLY ON)

'Puede ser util si quieres comprobar si una instrucción sql se ejecutará correctamente sin afectar a la base de datos.
    Private Function CheckSql(ByVal nOrden As Integer, ByVal Sql As String, ByVal cnStr As String) As String
        Dim report As String = ""
        Dim SqlNoExec As String = "SET FMTONLY ON"
        Dim cn As SqlClient.SqlConnection
        Dim value As Integer

        Try
            cn = New SqlClient.SqlConnection(cnStr)
            cn.Open()

            'lanzamos instruccion contra el servidor SQL para evitar cualquier cambio
            Dim cmd As New SqlClient.SqlCommand(SqlNoExec, cn)
            'ejecutamos SET FMTONLY ON en la base de datos
            value = cmd.ExecuteNonQuery()

            If value = -1 Then
               'a partir de este momento lo que ejecutemos no tendra efecto sobre la base de datos
                cmd.CommandText = Sql
                value = cmd.ExecuteNonQuery()
            End If

            cmd.Dispose()
            cmd = Nothing
            'en este punto el comando SET FMONLY ON ya no afecta, pues esta ligado a la vida del objeto cmd

            report = String.Format("{0,-8} {1,-12} {2} {3}", "OK", "Orden: " & nOrden, " SQL: " & Sql, vbTab & " ConnString: " & cnStr)
        Catch ex As Exception
            report = String.Format("{0,-8} {1,-12} {2} {3} {4}", "ERROR", "Orden: " & nOrden, " SQL: " & Sql, vbTab & " ConnString: " & cnStr, vbCrLf & ex.Message)
        End Try

        Return report
    End Function

No hay comentarios:

Publicar un comentario

VBA Access. Redondeo de números decimales con el método medio redondeo. Alternativa a la función Round (bankers round)

 Private Function Redondeo(ByVal Numero As Variant, ByVal Decimales As Integer) As Double     'Aplica método medio redondeo (half round ...