【问题标题】:How to get data using a list and SQL Serve in ASP.NET如何在 ASP.NET 中使用列表和 SQL Server 获取数据
【发布时间】:2020-02-05 03:45:39
【问题描述】:

我有一个 id 列表。这些是答案ID。我在应用程序中作为列表持有。我只想向 SQL Server 发出请求以获取与 id 匹配的答案。

我需要在 C# 中使用 foreach 循环吗?如何将结果合并到数据表或其他东西中?我需要一些帮助。

我想在 ASP.NET 项目中使用 C# 获取数据。

id列表:<List>:

answer_id
---------
5
4
23
2
45
16

我想用 C# 获取并显示在数据表中:(预期结果)

answer_id          answer
-------------------------------------
5                  It's true
4                  Maybe next time
23                 Man this is crazy
2                  Can i help you?
45                 Wtf..
16                 I can not believe..

如果有匹配项,我们的选择查询必须返回答案。在此示例中,假设我们找到了所有答案。

一个结果的简单查询:

SELECT answer_id, answer 
FROM answers 
WHERE answer_id = 5

结果:

  answer_id    answer
  -----------------------
    5          It's true

【问题讨论】:

    标签: c# asp.net sql-server foreach webforms


    【解决方案1】:

    假设您使用的是 ADO.NET,您将需要创建一个包含 answer_id 和 answer 属性的类。在我的示例中,我表现得好像有一个名为 Answer 的类具有这些值。然后我开始创建一个像这样的 DataAccess 类:

        public static class DataAccess
        {
            private static string reportConnectionString = "Data Source=;Initial Catalog=;Persist Security Info=;User ID=;Password=";
    
        public static class Answer
        {
           public int AnswerID {get; set;}
           public string Answer {get; set;}
        }
    
            public static bool GetRecords(int AnswerId, out List<Answer> lstAnswers, out string sMessage)
            {
                lstAnswers = new List <Answer>();
                AnswerID;
                sMessage = "";
    
                try
                {
                    using(SqlConnection connection = new SqlConnection(reportConnectionString))
                    {
                        connection.Open();
    
                        using (SqlCommand command = connection.CreateCommand())
                        {
    command.CommandType = System.Data.CommandType.Text;
                            command.Parameters.AddWithValue("@id", AnswerID);
    
                            command.CommandText = @"select answer_id, answer from answers where answer_id = @id";
    
                            using (SqlDataReader reader = command.ExecuteReader())
                            {
                                if (reader.HasRows == false)
                                {
                                    sMessage = "Could not find data";
                                    return false;
                                }
                                while(reader.Read())
                                {
                                    Answer answer= new Answer();
    
                                    answer.answer_id= reader.GetInt32(reader.GetOrdinal("answer_id"));
                                    answer.answer= reader.GetValue(reader.GetOrdinal("answer")).ToString();
    
                                    // -- Adding single object to list 
                                    lstAnswers.Add(log);
                                }
                            }
                        }
                    }
                    return true;
                }
                catch (Exception exc)
                {
                    sMessage = exc.ToString();
                    return false;
                }
            }
        }
    

    如果您有一个 answer_id 列表,您可以创建一个 foreach 循环来遍历该列表并将 answer_id 和 answer 连接起来显示。

    foreach (var item in lstAnswers)
    {
         txtTextBox.Text = item.answer_id + " " + item.answer;
    }
    

    【讨论】:

    • 我的意思是我有 answer_id 列表,但首先我们需要提交一个查询来获得答案,我想在列表中的数据表中显示所有答案。
    • 我刚刚在我的答案中添加了示例,说明您的函数在 select 语句中的外观。
    • 感谢您的更新,但我无法解释自己。 "SELECT answer_id, answer from TABLE WHERE answer_id=@id" 如果匹配正确,您可以得到吗?我有一个@id 列表。所以我想把所有东西合二为一。
    • 我现在才写来解释它。如果没有匹配,我不需要获取所有数据吗?
    • 还没有。我会尝试在数据表中绑定,最后,我会尝试在gridview中显示。只是需要时间..
    【解决方案2】:

    如果您使用的是 ADO.NET,则需要一些额外的步骤。

    您需要使用 Extension Helper,因为添加 List 作为参数是 ADO.NET 的限制之一,请参阅:Passing-list-int-as-parameter

    你可以做一个

    foreach(int x in myAnswerIdList){
    //execute a sqlCommand for every number in the list and save it into an array
    }
    

    但这确实是一种糟糕而丑陋的方法...... 使用实体框架的“最简单”方式,因为您已经拥有列表,它们存在许多方法可以使用 EF 实现您正在寻找的目标。

    【讨论】:

      猜你喜欢
      • 2017-12-03
      • 2020-04-02
      • 1970-01-01
      • 1970-01-01
      • 2010-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-30
      相关资源
      最近更新 更多