una definicion datos conexion .net vb.net connection-pooling

.net - definicion - "Ya hay un DataReader abierto..." ¿Reutilizar o desechar conexiones de base de datos?



conexion a base de datos definicion (1)

Es evidente que está utilizando una única conexión global y aparentemente la está dejando abierta. Como se ha mencionado, no debe reutilizar ni almacenar su conexión. Las conexiones son baratas de crear y .NET está optimizado para crearlas según sea necesario.

Hay varias cosas en su código que no se están cerrando y desechando. cual debería ser. La eliminación no solo evita que su aplicación pierda recursos, sino que este tipo de error no puede ocurrir al usar objetos DB creados recientemente para cada tarea.

Conexiones
Como hay giros involucrados en su creación, puede escribir una función para crear (y tal vez abrir) una nueva conexión y evitar tener que pegar la cadena de conexión en todas partes. Aquí hay un ejemplo general usando OleDB:

Public Function GetConnection(Optional usr As String = "admin", Optional pw As String = "") As OleDbConnection Dim conStr As String conStr = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};User Id={1};Password={2};", dbFile, usr, pw) Return New OleDbConnection(constr) End Function

Using bloques
Úselo en un bloque de Uso para que se elimine:

Using con As OleDb.OleDbConnection = GetConnection() Using cmd As New OleDbCommand(sql.Value, con) con.Open() Using rdr As OleDbDataReader = cmd.ExecuteReader() '' do stuff End Using '' close and dispose of reader End Using '' close and dispose of command End Using '' close, dispose of the Connection objects

Cada instrucción Using crea un nuevo objeto de destino y lo dispone al final del bloque.

En general, cualquier cosa que tenga un método Dispose puede y debe usarse en un bloque Using para garantizar que se elimine. Esto incluiría el MemoryStream y la Image utilizados en su código.

Using bloques se puede "apilar" para especificar más de un objeto y reducir la sangría (tenga en cuenta la coma después del final de la primera línea):

Using con As OleDb.OleDbConnection = GetConnection(), cmd As New OleDbCommand(sql.Value, con) con.Open() ... End Using '' close and dispose of Connection and Command

Para más información, ver:

can u pls convert this code to Mysql connection... my connection string is...

Para la conexión básica de MySQL:

'' module level declaration Private MySQLDBase as String = "officeone" Function GetConnection(Optional usr As String = "root", Optional pw As String = "123456") As MySqlConnection Dim conStr As String conStr = String.Format("Server=localhost;Port=3306;Database={0};Uid={1}; Pwd={2};", MySQLDBase, usr, pw) Return New MySqlConnection(constr) End Function

Personalmente para MySql, uso una clase y un ConnectionStringBuilder en el método. Hay muchas, muchas opciones interesantes que uso, pero que difieren de un proyecto a otro, como la base de datos y el inicio de sesión predeterminado de la aplicación. Lo anterior usa todos los valores predeterminados.

Por favor, ayuda ... Cuando selecciono datos de la tabla Mysql, muestra "Ya hay un DataReader abierto asociado con esta conexión que debe cerrarse primero. Vb.net"

Private Sub cmbJobCategoryVisa_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbJobCategoryVisa.SelectedIndexChanged ''''" Dim MyCommand As New MySqlCommand("SELECT jobcategorycode FROM jobcategory WHERE jobcategory=''" & Me.cmbJobCategoryVisa.SelectedItem & "''", MyConnection) Dim MyReader As MySqlDataReader = MyCommand.ExecuteReader While MyReader.Read If MyReader.HasRows = True Then Me.txtJobCategoryCodeVisa.Text = MyReader("jobcategorycode") End If End While MyReader.Close() MyCommand.Dispose() End Sub

'''' ''en el momento de la ejecución del código siguiente, se muestra el error de imagen

Private Sub txtEmpNo_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtEmpNo.Validating Dim MyCommand5 As New MySqlCommand("SELECT * FROM employeesmaster WHERE empno=''" & Me.txtEmpNo.Text & "''", MyConnection) Dim MyDataReader5 As MySqlDataReader = MyCommand5.ExecuteReader If MyDataReader5.HasRows = True Then While MyDataReader5.Read Me.txtEmpName.Text = MyDataReader5("name") Me.cmbNationality.Text = MyDataReader5("nationality") Me.cmbJobCategoryVisa.Text = MyDataReader5("jobcategoryvisa") If Not IsDBNull(MyDataReader5("image")) Then Dim ImageData As Byte() = DirectCast(MyDataReader5("image"), Byte()) Dim MemoryStream As New IO.MemoryStream(ImageData) Me.pbxEmpImage.Image = Image.FromStream(MemoryStream) Else Me.pbxEmpImage.Image = Nothing End If End While Else End If MyDataReader5.Close() MyCommand5.Dispose() End Sub