gpt4 book ai didi

c# - 如何使用 SqlDataReader 获取存储过程返回的分组数据?

转载 作者:行者123 更新时间:2023-11-30 17:39:45 25 4
gpt4 key购买 nike

我有一个由

定义的存储过程
CREATE PROCEDURE GetQuestionsGroupedBySection
@survey_id INT
AS
SELECT S.title, Q.qtext
FROM Sections AS S INNER JOIN Questions AS Q
ON S.id = Q.section_id
WHERE S.survey_id = @survey_id
GROUP BY S.title;

其中相关表定义为

CREATE TABLE Questions (
id INT IDENTITY(1,1),
section_id INT,
qtext NVARCHAR(300) NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (section_id) REFERENCES Sections(id) ON DELETE CASCADE
);

CREATE TABLE Sections (
id INT IDENTITY(1,1),
title NVARCHAR(200) NOT NULL,
survey_id INT,
PRIMARY KEY (id),
FOREIGN KEY (survey_id) REFERENCES Surveys(id) ON DELETE CASCADE
);

现在我正尝试从我的服务器端代码中调用它,以获取类型元素的 List 中的分组

public class QuestionsBySection
{
public string SectionTitle { get; set; }
public List<string> SecionQuestions;
}

(或者是否有更好的数据结构可以使用?)。我有的是

    public List<QuestionsBySection> GetQuestionsAndSection (int survid)
{
// survid: survey id
List<QuestionsBySection> AllQuestions = new List<QuestionsBySection>();
using (SqlCommand cmd = new SqlCommand("GetQuestionsGroupedBySection", this._Conn))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@survey_id", survid);
this._Conn.Open();
using ( SqlDataReader dataReader = cmd.ExecuteReader() )
{
while ( dataReader.Read() )
{
// ...
}
}
this._Conn.Close();
}
return AllQuestions;
}

但我不确定如何填写//...。有什么提示吗?

最佳答案

sql group by 错误

结果中有 2 列,但组中只有 1 列。您可以将第二列添加为按字段分组或使用聚合(例如 min() 或 max())。

SELECT S.title, qtext=max(Q.qtext)
FROM .....

数据读取器

只需将字段位置作为 GetString 的索引参数即可:

var sTitle = dataReader.GetString(0);
var sQuestion = dataReader.GetString(1);

关于c# - 如何使用 SqlDataReader 获取存储过程返回的分组数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35119267/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com