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

时间:2018-01-02 13:01:52

标签: database vb.net list variables ms-access

我试图将列表变量中的Microsoft Access数据库中的列名称放在列表变量中。到目前为止我已经这样做了,但是我试图将它添加到主题变量的行不起作用并且出现错误

  

预定义类型'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

2 个答案:

答案 0 :(得分:3)

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

  

重要

     

元组支持需要ValueTuple类型。如果未安装.NET Framework 4.7,则必须添加NuGet包中可用的NuGet包System.ValueTuple。如果没有此软件包,您可能会收到类似于"预定义类型' ValueTuple(Of ,,,)'的编译错误。未定义或导入。"

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

请参阅:NuGet Package Manager UI

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

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

答案 1 :(得分:3)

"{0,-20}{1}"判断,您忘记了String.Format

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

并且不打算使用元组。