Database 将数据库表中的列名放入列表

Database 将数据库表中的列名放入列表,database,vb.net,list,variables,ms-access,Database,Vb.net,List,Variables,Ms Access,我试图将MicrosoftAccess数据库中的表中的列名放入列表变量中。到目前为止,我已经这样做了,但是我试图将其添加到topic变量的那一行不起作用,并且出现了错误 未定义或导入预定义类型“valuetuple(of,,,,)” 代码是: Dim topic = topic() Dim filtervalues = {Nothing, Nothing, "Results", Nothing} Dim counter As Integer = 0 Using con = _ New O

我试图将MicrosoftAccess数据库中的表中的列名放入列表变量中。到目前为止,我已经这样做了,但是我试图将其添加到topic变量的那一行不起作用,并且出现了错误

未定义或导入预定义类型“valuetuple(of,,,,)”

代码是:

Dim topic = topic()
Dim filtervalues = {Nothing, Nothing, "Results", Nothing}
Dim counter As Integer = 0
Using con = _
    New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Database.mdb")
    Dim columns = con.GetSchema("columns", filtervalues)

    For Each row As DataRow In columns.Rows
        topic(counter) = ("{0,-20}{1}", row("column_name"), row("data_type"))
        counter = +1
    Next
End Using

根据上的文档,如果您使用的是4.7之前的框架版本,则必须获取NuGet package System.ValueTuple:

重要

元组支持需要ValueTuple类型。如果未安装.NET Framework 4.7,则必须添加NuGet package System.ValueTuple,该文件可在NuGet Gallery上获得。如果没有此包,您可能会遇到类似于“未定义或导入预定义类型‘ValueTuple(Of,,,,)’”的编译错误

在Visual Studio 2017中,右键单击您的解决方案并选择“管理解决方案的NuGet软件包…”。在搜索框中输入“valuetuple”。选择“System.ValueTuple”,右键单击要安装软件包的项目的复选框,然后单击安装

见:

此外,还必须将列表变量声明为

Dim topic = New List(Of (String, String, String))
并添加新的元素

topic.Add(("{0,-20}{1}", row("column_name"), row("data_type")))
柜台不再需要了


或者,您可以使用字符串列表并使用字符串插值设置字符串格式

Dim topic = New List(Of String)
Dim filtervalues = {Nothing, Nothing, "Results", Nothing}
Using con =
    New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Database.mdb")
    Dim columns = con.GetSchema("columns", filtervalues)

    For Each row As DataRow In columns.Rows
        topic.Add($"{row("column_name"),-20}{row("data_type")}")
    Next
End Using
“{0,-20}{1}”
判断,您忘记了中的
字符串.Format

topic(counter) = String.Format("{0,-20}{1}", row("column_name"), row("data_type"))

并且不打算使用元组。

顺便说一句,如果您想递增
计数器而不是将其设置为1,则需要
计数器+=1
。谢谢,它解决了这个问题。你帮了我很大的忙我使用了你为字符串推荐的第二段代码,但是我现在使用一段搜索代码来查找其中一个列名的索引,但是它出现了-1。我使用的是'Dim indexOfMyTopic=topic.FindIndex(函数(主题)(mytopic.Equals(主题))'。您知道问题是什么吗?它应该是类似于
Dim indexOfMyTopic=topic.FindIndex(函数s=mytopic)
的东西,其中s表示字符串条目。但是,由于您还有一个类型名,可能需要
Dim indexOfMyTopic=topic.FindIndex(函数s.StartsWith(mytopic))
是的,可能是这样。但是
主题
变量仍然不起作用。数组并不理想,因为事先不知道条目数,所以最好使用
列表(字符串)
添加(…)
而不是
计数器。你知道的。让我们等待OP提出一个新问题:)