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
相关产品推荐
相关产品推荐

