使用SQLDataReader代替记录集

10

我是新手,有个问题想问。我能否使用SQLDataReader代替Recordset?我希望在SQLDataReader中实现以下结果。

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

我能否用SQLDataReader替换recordset,如果可以的话,你能否展示一下代码上的更改?

3个回答

21

强烈建议您使用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

这个问题有C#的解决方案吗? - Steam
2
@Steam,您可以使用Telerik Convertervb.net转换为C#或反之亦然。 - Baby

2

您需要替换一些东西,类似于以下内容。

这是一个示例,您需要修改它以达到您的目标,但这显示了差异。

我还建议使用“Using”语句来管理连接/读取器。此外,使用参数化查询。

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()

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
不需要创建/加载数据集。 - Mitchel Sellers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接