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

VB.Net中ML.Net DatabaseLoader报至少需一列错误

报错原因

DatabaseLoader 不会自动解析SQL查询返回的结果集结构,调用无参的CreateDatabaseLoader()方法时没有传入任何列映射规则,加载器不知道要从结果集中读取哪些列、对应什么数据类型,就会抛出DatabaseLoader requires at least one Column异常。

解决步骤
  • 定义和查询结果字段匹配的数据模型
    按照要读取的Sales_Quarter_1表字段,编写对应的数据类,用LoadColumn特性标注每个字段对应的结果集列序号(序号从0开始,和SQL查询返回的列顺序一一对应),示例:
    Public Class SalesQuarterData
        <LoadColumn(0)>
        Public Property SaleId As Single
        <LoadColumn(1)>
        Public Property ClientName As String
        <LoadColumn(2)>
        Public Property TransactionAmount As Single
        <LoadColumn(3)>
        Public Property TransactionDate As DateTime
    End Class
    
  • 修改加载器初始化代码
    把无参的CreateDatabaseLoader()调用改为泛型版本,传入定义好的数据模型类型,让加载器自动根据模型特性生成列映射,替换原有创建loader的代码:
    Dim loader As DatabaseLoader = mlContext.Data.CreateDatabaseLoader(Of SalesQuarterData)()
    
  • (可选优化)避免隐式列顺序问题
    不要在查询语句中使用SELECT *,明确指定需要查询的列,保证列顺序和模型中LoadColumn标注的序号完全匹配,避免后续表结构变动导致映射错位:
    Dim commandText As String = "SELECT SaleId, ClientName, TransactionAmount, TransactionDate from Sales_Quarter_1"
    

如果不想定义强类型模型,也可以手动构造列映射数组传入加载器,示例代码如下:

' 手动配置列映射:参数分别为 列名、数据库字段类型、结果集列序号
Dim loadColumns = {
    New DatabaseLoader.Column("SaleId", DbType.Int32, 0),
    New DatabaseLoader.Column("ClientName", DbType.String, 1),
    New DatabaseLoader.Column("TransactionAmount", DbType.Single, 2),
    New DatabaseLoader.Column("TransactionDate", DbType.DateTime, 3)
}
Dim loader As DatabaseLoader = mlContext.Data.CreateDatabaseLoader(loadColumns)

内容的提问来源于stack exchange,提问作者Classified Mystery

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 21:39:15