2010-01-28 16 views
7

Soy nuevo en esto y tenía esta pregunta. ¿Puedo usar SQLDataReader en lugar de un Recordset? Quiero lograr el siguiente resultado en un SQLDataReader.Uso de SQLDataReader en lugar del conjunto de registros

Dim dbConn As New ADODB.Connection 
Dim rs As New ADODB.Recordset 
Dim sqlstr As String = "SELECT Name,Status FROM table1 WHERE id=" + item_id.Value.ToString 
rs.Open(SQL, dbConn) 
While Not rs.EOF 
    txtName.Text = rs.Fields.Item("Name").Value 
    ddlstatus.SelectedIndex = 1 
    rs.MoveNext() 
End While 
rs.Close() 
rs = Nothing 
dbConn.Close() 
dbConn = Nothing 

¿Puedo reemplazar registros con SQLDataReader y si puedo ¿Me podría mostrar los cambios en el código?

Respuesta

0
Dim rdrDataReader As SqlClient.SqlDataReader 
Dim cmdCommand As SqlClient.SqlCommand 
Dim dtsData As New DataSet 
Dim dtbTable As New DataTable 
Dim i As Integer 
Dim SQLStatement as String 

msqlConnection.Open() 

cmdCommand = New SqlClient.SqlCommand(SQLStatement, msqlConnection) 

rdrDataReader = cmdCommand.ExecuteReader() 

For i = 0 To (rdrDataReader.FieldCount - 1) 
    dtbTable.Columns.Add(rdrDataReader.GetName(i), rdrDataReader.GetFieldType(i)) 
Next 
dtbTable.BeginLoadData() 

Dim values(rdrDataReader.FieldCount - 1) As Object 

While rdrDataReader.Read 
    rdrDataReader.GetValues(values) 
    dtbTable.LoadDataRow(values, True) 
End While 
dtbTable.EndLoadData() 

dtsData.Tables.Add(dtbTable) 

msqlConnection.Close() 

Return dtsData 
+1

No hay necesidad de crear/cargar un conjunto de datos para esto. –

2

Tendrás que cambiar algunas cosas, algo similar a lo siguiente.

Aquí hay un ejemplo, tendrá que modificar esto para cumplir su objetivo, pero esto muestra la diferencia.

También recomiendo usar una instrucción "Using" para administrar la conexión/lector. Además, una consulta parametrizada.

Dim sConnection As String = "server=(local);uid=sa;pwd=PassWord;database=DatabaseName" 

Dim objCommand As New SqlCommand 
objCommand.CommandText = "Select * From tablename" 
objCommand.Connection = New SqlConnection(sConnection) 
objCommand.Connection.Open() 

Dim objDataReader As SqlDataReader = objCommand.ExecuteReader() 

If objDataReader.HasRows Then 
Do While objDataReader.Read() 
Console.WriteLine(" Your name is: " & Convert.ToString(objDataReader(0))) 
Loop 
Else 
Console.WriteLine("No rows returned.") 
End If 

objDataReader.Close() 
objCommand.Dispose() 
15

Su recomiendan encarecidamente que utilice el patrón using:

Dim sConnection As String = "server=(local);uid=sa;pwd=PassWord;database=DatabaseName" 
    Using Con As New SqlConnection(sConnection) 
     Con.Open() 
     Using Com As New SqlCommand("Select * From tablename", Con) 
      Using RDR = Com.ExecuteReader() 
       If RDR.HasRows Then 
        Do While RDR.Read 
         txtName.Text = RDR.Item("Name").ToString() 
        Loop 
       End If 
      End Using 
     End Using 
     Con.Close() 
    End Using 
+0

¿Hay una respuesta C# para esto? – Steam

+2

@Steam puede usar [Telerik Converter] (http://converter.telerik.com/) para convertir 'vb.net' a' C# 'o viceversa – Baby

Cuestiones relacionadas