我试图将列表变量中的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
答案 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"然后右键单击要安装软件包的项目的复选框,然后单击“安装”。
此外,您必须将列表变量声明为
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"))
并且不打算使用元组。