如何在从SqlDataReader读取变量时定义变量(返回所有行)

Sku*_*nia 1 c# sql-server sqldatareader c#-4.0

我有一个表,其中有14行我想要返回,并声明每个单元格作为变量.这是我尝试过的:

using (SqlConnection conn1 = new SqlConnection(ConfigurationManager.ConnectionStrings["2012SSMS"].ConnectionString))
        {
            SqlCommand cmd1 = new SqlCommand(@"SELECT [Question], [Answer] 
            from [MyTable]", conn1);
            conn1.Open();
            using (SqlDataReader reader1 = cmd1.ExecuteReader())
            {
                while (reader1.HasRows)
                {
                    reader1.GetName(0);
                    reader1.GetName(1);

                    while(reader1.Read())
                    {
                        string Question(1) = reader1.GetString(0); //errors here
                        string Answer(1) = reader1.GetString(1); //and here
                    }
                    reader1.NextResult();
                }
            }
}
Run Code Online (Sandbox Code Playgroud)

我希望将声明的变量返回为Question1- Question14Answer1- Answer14.我该怎么做呢?

Ste*_*eve 6

好吧,如果你想使用14个不同的名字,你可以为问题定义14个字符串变量,为答案定义14个字符串变量.但是,如果您拥有列表和其他收集课程,这是坦率的嘲笑.

例如

为您的问题/答案定义一个班级

public class QuestionAnswer
{
     public string Question {get;set;}
     public string Answer {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

然后修改你的代码来创建一个 List<QuestionAnswer>

List<QuestionAnswer> listOfQuestionsAndAnswers = new List<QuestionAnswer>();
using (SqlConnection conn1 = new SqlConnection(ConfigurationManager.ConnectionStrings["2012SSMS"].ConnectionString))
{
    SqlCommand cmd1 = new SqlCommand(@"SELECT [Question], [Answer] 
                                       from [MyTable]", conn1);
    conn1.Open();
    using (SqlDataReader reader1 = cmd1.ExecuteReader())
    {
           while(reader1.Read())
           {
               QuestionAnswer qa = new QuestionAnswer();
               qa.Question = reader1.GetString(0); 
               qa.Answer = reader1.GetString(1); 
               listOfQuestionsAndAnswers.Add(qa);
           }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,您可以使用以下语法在List中使用任何问题

string aQuestion = listOfQuestionsAndAnswers[0].Question;
string anAnswer = listOfQuestionsAndAnswers[0].Answer;
Run Code Online (Sandbox Code Playgroud)

最后,我真的建议你花一点时间学习如何使用Dapper,如Gravell先生的回答所示.