2010-01-28 27 views
7

Jestem nowy w tym i miałem to pytanie. Czy mogę użyć SQLDataReader zamiast zestawu rekordów. Chcę osiągnąć następujący wynik w SQLDataReader.Używanie SQLDataReader zamiast zestawu rekordów

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 

Czy mogę zastąpić zestaw rekordów za pomocą SQLDataReader i czy mogę to zrobić, proszę pokazać zmiany w kodzie?

Odpowiedz

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

Nie ma potrzeby tworzenia/ładowania zestawu danych do tego. –

2

Będziesz musiał wymienić kilka rzeczy, coś podobnego do następującego.

Oto przykład, musisz zmienić to, aby osiągnąć swój cel, ale to pokazuje różnicę.

Polecam również użycie instrukcji "Using" do zarządzania połączeniem/czytnikiem. Ponadto sparametryzowane zapytanie.

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

Jest wysoce zalecane, aby użyć using wzoru:

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

Czy istnieje odpowiedź C# na to? – Steam

+2

@Steam możesz użyć [Konwerter Telerik] (http://converter.telerik.com/) do konwersji 'vb.net' na' C# 'lub na odwrót – Baby