c# - 检索以前的记录并存储到文本框

标签 c# sql visual-studio

我正在使用 C# 在 Visual Studio 2017 中开发一个项目,它显示和保存测试结果并比较当前和以前的记录,尽管我创建了一个试用解决方案文件来简化表格。

其中一个功能类似于this question除了我的基于服务的数据库 dtbTrial 中有这张表:

CREATE TABLE [dbo].[tblTest1]
(
    [TestNumber] NUMERIC(8) NOT NULL PRIMARY KEY, 
    [ParameterA] REAL NULL, 
    [ParameterB] REAL NULL, 
    CONSTRAINT [FK_tblTest1_tblTestMain] FOREIGN KEY ([TestNumber]) REFERENCES [tblTestMain]([TestNumber])
)

并打算取回上一条记录,将上一条记录的ParameterAParameterB分别放入各自的文本框。相关表格目前有三行。

使用上面的链接问题,我尝试复制它并在单击按钮时运行我的代码。我根据答案尝试了两个查询字符串:

WITH dbo AS
(SELECT *, ROW_NUMBER() OVER (PARTITION BY TestNumber ORDER BY TestNumber) row_num FROM tblTest1)
SELECT a.TestNumber,
a.ParameterA, (SELECT MAX(b.ParameterA) FROM dbo b WHERE b.TestNumber = a.TestNumber AND b.row_num < a.row_num) AS PrevParameterA,
a.ParameterB, (SELECT MAX (b.ParameterB) FROM dbo b WHERE b.TestNumber = a.TestNumber AND b.row_num < a.row_num) AS PrevParameterB
FROM dbo a  WHERE TestNumber = @testnumber"

SELECT TestNumber, ParameterA, LAG(ParameterA) OVER (PARTITION BY TestNumber ORDER BY TestNumber) PrevParameterA, ParameterB, LAG(ParameterB) OVER (PARTITION BY TestNumber ORDER BY TestNumber) PrevParameterB FROM tblTest1 WHERE TestNumber = @testnumber

然后运行以下代码:

using (SqlConnection con = new SqlConnection(constring))
            {
                using(SqlCommand cmd = new SqlCommand(query, con))
                {
                    cmd.Parameters.AddWithValue("@testnumber", testNumberTextBox.Text);
                    con.Open();

                SqlDataReader dr = cmd.ExecuteReader();

                while (dr.Read())
                {
                    textBox2.Text = (dr["PrevParameterA"].ToString());
                    textBox1.Text = (dr["PrevParameterB"].ToString());
                }

                con.Close();
            }
        }

预期的输出没有启动,即文本框保持为空或没有值。我也尝试同时运行到数据库的数据集并出现以下错误:

The OVER SQL construct or statement is not supported.

像我这样的初学者,我不知道如何修复它。我错过了什么或者我应该怎么做才能纠正这个问题?

最佳答案

根据您的表定义和代码,您希望获取给定测试编号的先前记录。然后您不需要使用 over 或其他任何复杂的查询。

这个查询对你来说足够了

SELECT TOP 1 * FROM [tblTest1] WHERE TestNumber < @testnumber ORDER BY TestNumber DESC

关于c# - 检索以前的记录并存储到文本框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48275852/

相关文章:

c# - 请在特定于平台的项目中调用 CachedImageRenderer.Init 方法以使用 FFImageLoading?

sql - 合并: modifying multiple tables

visual-studio - 如何舒适地设置 Visual Studio 2010 键盘快捷键,尤其是在使用 ReSharper 时?

使用带有 ORDER BY 和 LIMIT 的 INNER JOIN 的 MySQL 更新

python - 在不使用数据库软件的情况下从表中获取项目列表

git - 如何在 Visual Studio 2019 中 fork 本地 git 存储库?

sql - SQL Server 中的求和或乘法

c# - 使用 WP Rest API Request C# 添加 SEO

c# - Automapper - 为什么要使用 Mapper.Initialize?

c# - LINQ to XML 新手 : Moving Nodes From One Node To Another