2011-09-08 14 views
5

Soy nuevo en las declaraciones preparadas en vb.net y Microsoft SQL Server 2008. Realmente no puedo encontrar ninguna buena fuente para conectarme a una base de datos a través de una cadena de conexión y ejecutar declaraciones preparadas. ¿Podría alguien mostrarme un ejemplo o señalarme un recurso que podría ser útil?Declaraciones preparadas en VB.NET

Respuesta

4

Las declaraciones preparadas no son más que comandos sql parametrizados encerrados en una transacción.

Por ejemplo, esta es una declaración preparada:

Using c As New SqlConnection(ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString) 
    c.Open() 
using mytransaction = c.BeginTransaction() 

    Dim command = New SqlCommand("INSERT INTO yourtable(image) values (@image)", c) 
    ''# this is specific to the FileUploadControl but the idea is to get the 
    ''#image in a byte array; however you do it, it doesn't matter 
    Dim buffer(FileUpload1.PostedFile.ContentLength) As Byte 
    FileUpload1.PostedFile.InputStream.Read(buffer, 0, buffer.Length) 
    command.Parameters.AddWithValue("@image", buffer) 
    command.ExecuteNonQuery()  
mytransaction .Commit() 
End Using 
End Using 
+2

Lo sentimos, pero ... creo que estás equivocado? No requieren una transacción y tienen beneficios en términos de permitir que el servidor reutilice el plan de ejecución. http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.prepare(v=vs.110).aspx – Basic

+0

@Basic lo que describió son procedimientos almacenados. Si bien todos los procedimientos almacenados son declaraciones preparadas, no todas las declaraciones preparadas son procedimientos almacenados. –

+0

@ DavidSöderlund Soy consciente de ambos (de hecho, los documentos que he vinculado para analizar ambos). El punto que estaba tratando de hacer es que la respuesta de Icarus no parece ser precisa, por ejemplo, puedo compilar una declaración preparada, permitir que el servidor cree un plan de ejecución y luego volver a usarlo varias veces. Esta respuesta omite ese patrón por completo. – Basic

6

Aquí hay un código ejemplo rápido:

Using cn As New SqlConnection("your connection string here"), _ 
     cmd AS New SqlCommand("SELECT * FROM Table WHERE ID= @ID", cn) 

    cmd.Parameters.Add("@ID", SqlDbType.Int).Value = 12345 

    cn.Open() 
    Using rdr As SqlDataREader = cmd.ExecuteReader() 
     While rdr.Read() 
      'Do something with the record 
     End While 
     rdr.Close() 
    End Using 
End Using 

Por supuesto es necesario importar System.Data y System.Data.SqlClient.

0
Dim datOleReader As SqlDataReader 
' Public con As New SqlConnection 

Public Function CHECK_CONNECTION(ByVal CON As SqlConnection) As SqlConnection 
    Try 
     If CON.State = ConnectionState.Broken Or CON.State = ConnectionState.Closed Then 
      CON.Open() 
     End If 
    Catch ex As Exception 
     CON.Close() 
     CON.Open() 
    End Try 

    Return CON 
End Function 

Public Function gGetMaxCode(ByVal strTable As String, ByVal strCode As String) As Long 
    Dim cmdtext As New SqlCommand 
    Try 
     ' con = clsexe.CHECK_CONNECTION(con) # 
     ' cmdtext.Connection = con # 
     cmdtext.Connection = CHECK_CONNECTION(con) ' # 
     cmdtext.CommandText = "SELECT ISNULL(MAX(" & strCode & "),0)+1 FROM " & strTable 
     datOleReader = cmdtext.ExecuteReader(CommandBehavior.SingleRow) 
     datOleReader.Read() 
     If datOleReader.IsDBNull(0) Then 
      Return 1 
     Else 
      Return datOleReader.Item(0) 
     End If 

    Catch ex As Exception 
     MsgBox(ex.Message.ToString) 
    Finally 
     datOleReader.Close() 
    End Try 
End Function 
Public Function gGetMaxCode(ByVal strTable As String, ByVal strCode As String, ByVal trans As SqlTransaction) As Long 
    Dim cmdtext As New SqlCommand 
    Try 
     ' con = clsexe.CHECK_CONNECTION(con) # 
     ' cmdtext.Connection = con # 
     cmdtext.Connection = CHECK_CONNECTION(con) ' # 
     cmdtext.CommandText = "SELECT ISNULL(MAX(" & strCode & "),0)+1 FROM " & strTable 
     cmdtext.Transaction = trans 
     datOleReader = cmdtext.ExecuteReader(CommandBehavior.SingleRow) 
     datOleReader.Read() 
     If datOleReader.IsDBNull(0) Then 
      Return 1 
     Else 
      Return datOleReader.Item(0) 
     End If 

    Catch ex As Exception 
     Throw ex 
    Finally 
     datOleReader.Close() 
    End Try 
End Function 

    Public Function ExecuteQry(ByVal qry As String) As Boolean 
    Dim cmdtext As New SqlCommand 
    Try 
     'con = cls.cnn # 
     'cmdtext.Connection = con # 
     cmdtext.Connection = CHECK_CONNECTION(con) ' # 
     cmdtext.CommandText = qry 
     cmdtext.CommandType = CommandType.Text 
     cmdtext.ExecuteNonQuery() 
     cmdtext.Dispose() 
     cmdtext = Nothing 
     ErrCode = True 
    Catch ex As Exception 
     'gErrMsg() 
     ErrCode = False 
     MsgBox(ex.Message.ToString) 
    Finally 
     'con.Close() 
    End Try 
End Function 
Public Function ExecuteQry(ByVal qry As String, ByVal trans As SqlTransaction) As Boolean 
    Dim cmdtext As New SqlCommand 
    Try 
     'con = cls.cnn # 
     'cmdtext.Connection = con # 
     cmdtext.Connection = CHECK_CONNECTION(con) ' # 
     cmdtext.CommandText = qry 
     cmdtext.CommandType = CommandType.Text 
     cmdtext.Transaction = trans 
     cmdtext.ExecuteNonQuery() 
     cmdtext.Dispose() 
     cmdtext = Nothing 
    Catch ex As Exception 
     Throw ex 
     'gErrMsg() 
     MsgBox(ex.Message.ToString) 
    Finally 
     'con.Close() 
    End Try 
End Function 


Public Function ExecuteSelect(ByVal qry As String, ByVal trans As SqlTransaction) As SqlDataReader 

    Dim cmdtext As New SqlCommand 
    Try 
     'con = cls.cnn # 
     'cmdtext.Connection = con # 
     cmdtext.Connection = CHECK_CONNECTION(con) ' # 
     cmdtext.CommandText = qry 
     cmdtext.CommandType = CommandType.Text 
     cmdtext.Transaction = trans 
     ExecuteSelect = cmdtext.ExecuteReader() 
     Return ExecuteSelect 
     cmdtext.Dispose() 
     cmdtext = Nothing 

    Catch ex As Exception 
     Throw ex 
     'MsgBox(ex.Message.ToString) 
    Finally 
     'clsexe.ExecuteSelect.Close() 
     'con.Close() 
    End Try 
End Function 


Public Function Executescalar(ByVal qry As String, ByVal trans As SqlTransaction) 

    Dim cmdtext As New SqlCommand 
    Try 
     'con = cls.cnn # 
     'cmdtext.Connection = con # 
     cmdtext.Connection = CHECK_CONNECTION(con) ' # 
     cmdtext.CommandText = qry 
     cmdtext.CommandType = CommandType.Text 
     cmdtext.Transaction = trans 
     Executescalar = cmdtext.ExecuteScalar 
     cmdtext.Dispose() 
     cmdtext = Nothing 

    Catch ex As Exception 
     Throw ex 
     ' MsgBox(ex.Message.ToString) 
    Finally 
     ' con.Close() 
    End Try 

End Function 


Public Function ExecuteAdapter(ByVal qry As String, ByVal trans As SqlTransaction) As SqlDataAdapter 
    Dim cmdtext As New SqlCommand 
    Dim da As New SqlDataAdapter 
    Try 
     'con = cls.cnn # 
     'cmdtext.Connection = con 
     cmdtext.Connection = CHECK_CONNECTION(con) ' # 
     cmdtext.CommandTimeout = 0 
     cmdtext.CommandText = qry 
     cmdtext.Transaction = trans 
     cmdtext.CommandType = CommandType.Text 
     da.SelectCommand = cmdtext 
     Return da 
     cmdtext.Dispose() 
     cmdtext = Nothing 
    Catch ex As Exception 
     Throw ex 
     'MsgBox(ex.Message.ToString) 
    Finally 
     ' con.Close() 
    End Try 
End Function 


Public Function Executedataset(ByVal qry As String) As DataSet 
    Dim cmdtext As New SqlCommand 
    Dim ds As New DataSet 
    Dim da As New SqlDataAdapter 
    Try 
     'con = cls.cnn # 
     'cmdtext.Connection = con # 
     cmdtext.Connection = CHECK_CONNECTION(con) ' # 
     cmdtext.CommandText = qry 
     cmdtext.CommandType = CommandType.Text 
     da.SelectCommand = cmdtext 
     da.Fill(ds) 
     cmdtext.Dispose() 
     cmdtext = Nothing 
    Catch ex As Exception 
     MsgBox(ex.Message.ToString) 
    End Try 
End Function 

Public Function ExecuteProcedure(ByVal qry As String) As Boolean 
    Dim cmdtext As New SqlCommand 
    Try 
     'con = cls.cnn # 
     'cmdtext.Connection = con # 
     cmdtext.Connection = CHECK_CONNECTION(con) ' # 
     cmdtext.CommandText = qry 
     cmdtext.CommandType = CommandType.StoredProcedure 
     cmdtext.ExecuteNonQuery() 
     cmdtext.Dispose() 
     cmdtext = Nothing 
    Catch ex As Exception 
     MsgBox(ex.Message.ToString) 
    End Try 
End Function 
+3

¿Podría agregar más detalles aquí, por favor? Si bien puedo apreciar el ejemplo, una explicación de algunas piezas sería agradable. –

Cuestiones relacionadas