【问题标题】:Using SQLDataReader instead of recordset使用 SQLDataReader 而不是记录集
【发布时间】: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 替换记录集吗?如果可以,请告诉我代码中的变化?

【问题讨论】:

    标签: vb.net adodb 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 Convertervb.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
      

      【讨论】:

      • 不需要为此创建/加载数据集。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-03
      相关资源
      最近更新 更多