VB.NET 2012中DataTable.AsEnumerable编译错误解决问询
解决VB.NET中DataTable.AsEnumerable()报错BC30456的问题
错误原因
AsEnumerable()是System.Data.DataTableExtensions类提供的扩展方法,不属于DataTable本身的成员。出现BC30456错误的核心原因是:
- 项目未引用
System.Data.DataSetExtensions程序集 - 代码未导入对应命名空间(或引用缺失导致扩展方法无法被识别)
解决方案
1. 添加程序集引用
在VB.NET 2012项目中:
- 右键项目 → 选择「添加引用」
- 在弹出窗口中找到
System.Data.DataSetExtensions,勾选后点击「确定」
2. 确保导入命名空间
在代码文件顶部添加命名空间导入:
Imports System.Data
(注:多数情况下项目默认已导入,但缺失引用时即使有命名空间也无法识别扩展方法)
修正后的示例代码
Imports System.Data Imports System.Data.OleDb Module ExcelReader Sub Main() ' 替换为你的Excel文件路径 Dim excelPath As String = "C:\test.xlsx" Dim connStr As String = $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={excelPath};Extended Properties=""Excel 12.0 Xml;HDR=YES""" Dim sql As String = "SELECT * FROM [Sheet1$]" Using conn As New OleDbConnection(connStr) Using adapter As New OleDbDataAdapter(sql, conn) Dim dt As New DataTable() adapter.Fill(dt) ' 转换为可枚举集合并转为数组 Dim dataArray = dt.AsEnumerable().Select(Function(r) r.ItemArray).ToArray() ' 打印到控制台 For Each row In dataArray Console.WriteLine(String.Join(vbTab, row)) Next End Using End Using Console.ReadKey() End Sub End Module
额外说明
VB.NET 2012对应的.NET Framework版本(4.0/4.5)完全支持DataSetExtensions,因此不是编译器版本过旧导致的问题,核心是引用缺失。
内容的提问来源于stack exchange,提问作者Shodan
相关产品推荐
相关产品推荐

