【问题标题】:Creating a button that will notify me of the last “sReportNo”创建一个按钮,通知我最后一个“sReportNo”
【发布时间】:2020-11-03 11:21:15
【问题描述】:

我有一个名为“Reports”的数据库,我想打印最后一个“sReportNo”。

这是代码:

SQLiteCommand CommandText = new SQLiteCommand("SELECT * FROM Reports WHERE sReportNo = (SELECT MAX(sReportNo) FROM Reports)", conn);
SQLiteDataReader reader = commandText.ExecuteReader();
var lastReportNo = reader;
MessageBox.Show("Currently, there is " +lastReportNo+ " reports.");

它会打印“当前,有 System.Data.SQLiteDataReader 报告。”

【问题讨论】:

  • 旁注:为什么不简单地SELECT TOP 1 * FROM Reports ORDER BY sReportNo DESC
  • 它告诉我“数据库架构已更改”-“接近“1”:语法错误”
  • 我没抓到你,我该怎么办? :) 我写的和你写的一模一样
  • "Currently, there is " +lastReportNo+ " reports." 将执行 lastReportNo.ToString() 导致观察到的输出。您需要将阅读器推进到第一个结果(如果有),然后调用其中一个 Get... 重载并输出结果。
  • 如果您期望单值结果 - 考虑使用 ExecuteScalar 而不是 ExecuteReader & 然后需要读取。 docs.microsoft.com/en-us/dotnet/api/…

标签: c# wpf sqlite


【解决方案1】:

我找到了正确的代码:

SQLiteCommand commandText = new SQLiteCommand(“SELECT Count(*) FROM Reports ORDER BY sReportNo DESC”, conn);
var lastReportNo = commandText.ExecuteScalar();
MessageBox.Show("Currently, there is " + lastReportNo + " reports.");

【讨论】:

  • 如果有记录被删除的可能,你会得到错误的值。更好的查询是 "SELECT TOP 1 sReportNo FROM Reports ORDER BY sReportNo DESC"
  • 抱歉,我应该检查一下确切的语法 - "SELECT sReportNo FROM Reports ORDER BY sReportNo DESC LIMIT 1" sqlitetutorial.net/sqlite-limit
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多