2010-01-28 16 views
7

Sono nuovo e ho avuto questa domanda. Posso usare SQLDataReader invece di un Recordset. Voglio ottenere il seguente risultato in un SQLDataReader.Utilizzo di SQLDataReader invece del recordset

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 

Posso sostituire recordset con SQLDataReader e se posso potete per favore mi mostra le variazioni di codice?

risposta

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

Non v'è alcuna necessità di creare/caricare un set di dati per questo. –

2

Dovrai scambiare alcune cose, qualcosa di simile al seguente.

Ecco un esempio, è necessario modificarlo per raggiungere l'obiettivo, ma questo indica la differenza.

Si consiglia inoltre di utilizzare un'istruzione "Utilizzo" per gestire la connessione/lettore. Inoltre, una query parametrizzata.

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

La sua consiglia vivamente di utilizzare il modello 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

C'è una risposta C# per questo? – Steam

+2

@Steam puoi usare [Telerik Converter] (http://converter.telerik.com/) per convertire 'vb.net' in' C# 'o viceversa – Baby

Problemi correlati