【问题标题】:How to save a retrieved column from a datareader into an array?如何将检索到的列从数据读取器保存到数组中?
【发布时间】:2011-03-17 07:51:55
【问题描述】:

我想在一个表中检索大约 800 行的单列,并将这些值保存在一个数组中,以便以后引用它们。我该怎么做?我试过了:

    con = New OleDb.OleDbConnection("provider=SQLOLEDB;data source=PC;initial catalog=DB1;integrated security=SSPI")  

    cmd = New OleDbCommand("select col1 from table1", con)

    con.Open()

    r = cmd.ExecuteReader

    While r.Read

        prev_ob(i) = r.Item(0)(0)

        i = i + 1

    End While

    For i = 0 To UBound(prev_ob)

        Console.WriteLine(prev_ob(i))

    Next`

但它没有用。 col1 是 Int64 类型,数组 prev_ob() 也是如此。请告诉我如何将其保存到数组中。

【问题讨论】:

    标签: vb.net arrays sqldatareader


    【解决方案1】:

    您遇到的错误是什么?更多信息将帮助您更快地得到答案。

    试试这个:

    Dim int64list As New List(Of Int64)
    
    cmd = New OleDbCommand("select col1 from table1", con)
    
        con.Open()
        r = cmd.ExecuteReader
    
        While r.Read
    
            int64list.Add(Convert.ToInt64(r.Item(0))
    
        End While
    
    For Each obj In int64list
         Console.WriteLine(obj)
    Next obj
    

    PS 我写了一个用 C# 工作的示例,并尝试翻译成 VB.net。

    【讨论】:

    • 首先,好听的用户名! :) 接下来,当我尝试执行您发布的代码时,出现以下错误: Object cannot be cast from DBNull to other types。所以我尝试了:prev_ob.Add(r.Item("col1")) 然后我得到:从“DBNull”类型到“Long”类型的转换无效。怎么了? :(
    • 成功了! :) 其中一列是空的。我修改了我的查询并且它有效。谢谢! :)
    • 有什么方法可以使用此列表的各个值进行计算,并可能在 SQL 查询中使用?
    • “有什么方法可以使用单个值...”请详细说明。使用列表中的这些值进行任何计算都应该很简单。
    • 没关系。我让它工作。 :) 使用了您建议的方法并且可以使用它。谢谢! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-20
    • 2019-05-10
    • 1970-01-01
    • 2011-08-30
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    相关资源
    最近更新 更多