You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:22:46