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