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

ASP.NET Razor Pages中SQL Server数据无法填充HTML表格问题

问题排查与解决方案

1. 先解决「异常被吞」的核心问题

你的catch块是空的,所有数据库连接、数据读取时的错误都会被隐藏,这是你看不到问题根源的关键。立刻修改catch块,输出异常信息:

catch(Exception ex)
{
    Console.WriteLine($"出错了:{ex.Message}");
    Console.WriteLine($"详细堆栈:{ex.StackTrace}");
    // 调试阶段也可以直接抛出异常,更直观:
    // throw;
}

运行后查看控制台输出,就能明确是连接失败、SQL执行错误还是数据读取时的类型不匹配问题。

2. 检查连接字符串的转义问题

C#字符串中的反斜杠\需要转义,你的连接字符串Data Source=jbserver\jbsql需改成以下两种写法之一:

  • 用双反斜杠转义:
    string connectionString = "Data Source=jbserver\\jbsql;Initial Catalog=PRODUCTION;Persist Security Info=True;User ID=CEM;Password=****";
    
  • 用逐字字符串前缀@(无需转义):
    string connectionString = @"Data Source=jbserver\jbsql;Initial Catalog=PRODUCTION;Persist Security Info=True;User ID=CEM;Password=****";
    

如果转义错误,connection.Open()会抛出异常,但之前被空catch吞掉,导致你误以为连接成功。

3. 避免按索引读取数据,匹配正确的数据类型

你用reader.GetString(0)这类按索引读取的方式,极易因列顺序变化、数据类型不匹配出错:

  • 比如数据库中Quantity是数字类型,用GetString会直接抛出类型转换异常;
  • 列索引写错(比如误把第15列当成第14列)也会导致读取失败。

建议改为按列名读取,并根据数据库实际类型处理:

TransactionData transaction = new TransactionData();
// 按列名读取,同时根据实际类型转换
transaction.Id = reader["Id"].ToString();
transaction.Employee = reader["Employee"].ToString();
// 日期类型先转成DateTime再格式化
transaction.WorkDate = Convert.ToDateTime(reader["WorkDate"]).ToString("yyyy-MM-dd");
transaction.TransactionStart = reader["TransactionStart"].ToString();
transaction.Quantity = reader["Quantity"].ToString();
// 其他字段同理...

这种方式更可靠,也不会因表结构调整(列顺序变化)出错。

4. 将TransactionData的字段改为属性(规范优化)

虽然Razor可以访问公共字段,但ASP.NET更推荐用带get;set;的属性,避免潜在的绑定问题:

public class TransactionData
{
    public string Id { get; set; }
    public string Employee { get; set; }
    public string WorkDate { get; set; }
    public string TransactionStart { get; set; }
    public string TransactionEnd { get; set; }
    public string Job { get; set; }
    public string Quantity { get; set; }
    public string PO { get; set; }
    public string LastUpdated { get; set; }
}

5. 调试技巧:确认transList是否有数据

  • 在transList.Add(transaction);行打断点,运行时会停在此处,鼠标悬停在transaction上即可查看字段值;
  • 在循环结束后添加一行代码,输出读取到的数据量:
    Console.WriteLine($"共读取{transList.Count}条数据");
    
    通过控制台输出确认是否有数据被添加到列表中。

6. 验证SQL语句本身是否返回数据

直接在SQL Server Management Studio(SSMS)中执行SELECT * FROM Transaction_Data;,确认是否有数据返回。如果SQL本身查不到数据,代码自然也读不到任何内容。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 16:07:41