使用 SQLDataReader 而不是记录集
Posted
技术标签:
【中文标题】使用 SQLDataReader 而不是记录集【英文标题】:Using SQLDataReader instead of recordset 【发布时间】:2011-01-10 13:23:57 【问题描述】:我是新手,有这个问题。我可以使用 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 替换记录集吗?如果可以,请告诉我代码中的变化?
【问题讨论】:
【参考方案1】:强烈建议您使用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 您可以使用Telerik Converter 将vb.net
转换为C#
,反之亦然【参考方案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()
【讨论】:
【参考方案3】: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
【讨论】:
不需要为此创建/加载数据集。以上是关于使用 SQLDataReader 而不是记录集的主要内容,如果未能解决你的问题,请参考以下文章
检查它是不是是 sqldatareader 中的最后一条记录
.NET SqlDataReader对象是否使用数据库游标,或者整个结果集是否已加载到RAM中?