Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检索上一条记录并存储到文本框_C#_Sql_Visual Studio - Fatal编程技术网

C# 检索上一条记录并存储到文本框

C# 检索上一条记录并存储到文本框,c#,sql,visual-studio,C#,Sql,Visual Studio,我正在Visual Studio 2017中使用C处理一个项目,该项目显示和保存测试结果,并比较当前和以前的记录,尽管我创建了一个试用解决方案文件以简化表格 它的一个功能与类似,只是我在基于服务的数据库dtbTrial中有一个表: 并用于检索上一条记录,并将上一条记录的参数A和参数B放入其各自的文本框中。相关表当前有三行 使用上面的链接问题,我尝试复制它,并在单击按钮时运行到我的代码。我根据答案尝试了两个查询字符串: WITH dbo AS (SELECT *, ROW_NUMBER() OVE

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

它的一个功能与类似,只是我在基于服务的数据库dtbTrial中有一个表:

并用于检索上一条记录,并将上一条记录的参数A和参数B放入其各自的文本框中。相关表当前有三行

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

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"
然后运行以下代码:

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();
            }
        }
预期输出未启动,即文本框保持为空或无值。我还尝试同时运行到数据库的数据集,出现以下错误:

不支持OVER SQL构造或语句

虽然我是一个初学者,但我不知道如何修复它。我遗漏了什么,或者我应该做些什么来纠正这个问题?

基于包含alias可能会解决您的问题。因此,您的子查询将如下所示:

SELECT t.*, 
    ROW_NUMBER() OVER (PARTITION BY TestNumber ORDER BY TestNumber) row_num 
FROM tblTest1 t

根据表定义和代码,您希望获得给定testnumber的前一条记录。这样就不需要使用over或其他任何复杂的查询

这个问题对你来说已经足够了

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

使用别名仍然会给出空文本框,但我可能会注意在需要时使用别名。谢谢
SELECT t.*, 
    ROW_NUMBER() OVER (PARTITION BY TestNumber ORDER BY TestNumber) row_num 
FROM tblTest1 t
SELECT TOP 1 * FROM [tblTest1] WHERE TestNumber < @testnumber ORDER BY TestNumber DESC