.NET:如何从Dataset的Table加载行到临时DataTable?
解决Dataset表行加载为0的问题
咱们来拆解下问题出在哪,然后帮你搞定它!
问题根源
你这里的核心问题不是「如何把行加载到DataTable」,而是你创建的强类型Dataset实例myApplication.myDataset默认只有表结构,没有实际数据。你只是初始化了这个Dataset,但没有从数据库(或其他数据源)填充数据,所以myDataset.Tables(nameOfTable)本身就是一个空表(只有列定义,没有行数据),赋值给myTable后自然行数为0。
正确的解决步骤
1. 先给强类型Dataset填充数据
要让Dataset里的表有数据,你需要用DataAdapter(比如SqlDataAdapter、OleDbDataAdapter等)从数据源把数据填充进去。举个SQL Server的示例:
' 替换成你的数据库连接字符串 Dim connectionString As String = "Server=你的服务器名;Database=你的数据库名;Integrated Security=True;" Using conn As New SqlConnection(connectionString) ' 创建DataAdapter,指定查询语句和数据库连接 Dim adapter As New SqlDataAdapter($"SELECT * FROM {nameOfTable}", conn) ' 初始化强类型Dataset Dim myDataset As New myApplication.myDataset() ' 把查询到的数据填充到Dataset的指定表中 adapter.Fill(myDataset, nameOfTable) ' 直接获取Dataset中的表引用,不需要额外new DataTable Dim myTable As DataTable = myDataset.Tables(nameOfTable) ' 现在你可以看到正确的行数了 Console.WriteLine($"当前表行数:{myTable.Rows.Count}") End Using
2. 复制已有表的结构和数据(如果需要)
如果你的Dataset里的表已经有数据,只是想复制到一个新的临时DataTable中,可以用Copy()方法(会同时复制表结构和数据):
' 假设myDataset已经填充过数据 Dim myTable As DataTable = myDataset.Tables(nameOfTable).Copy()
如果只需要复制表结构不需要数据,用Clone()方法:
Dim myTable As DataTable = myDataset.Tables(nameOfTable).Clone() ' 之后可以手动添加行或者导入其他数据源的数据
你的原有代码小问题说明
你原来的代码里先Dim myTable as new dataTable创建了一个空DataTable,然后立刻把myDataset.Tables(nameOfTable)赋值给它——其实这个new出来的DataTable对象会被直接丢弃,myTable最终只是指向Dataset里的那个表。但因为Dataset没被填充,所以行数为0。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

