简体   繁体   English

如何使用SqlDataReader从C#中的SQL Server数据库检索多行?

[英]How to retrieve multiple rows from SQL Server database in C# using SqlDataReader?

I am trying to write a method which is supposed to retrieve multiple rows from a table in a database and use those data to instantiate a number of objects. 我正在尝试编写一种方法,该方法应该从数据库中的表中检索多行,并使用这些数据实例化多个对象。 However, as far as i can tell the database only returns the first row. 但是,据我所知,数据库仅返回第一行。 When i do this: 当我这样做时:

public static List<Event> getMultipleEvents(string[] eventNames)
        {
            List<Event> rtnList = new List<Event>(); 

            string EventsToRetrieve = "";

            foreach (var item in eventNames)
            {
                if (EventsToRetrieve != "")
                {
                    EventsToRetrieve += " OR ";
                }

                EventsToRetrieve += "eventName = '";
                EventsToRetrieve += item;
                EventsToRetrieve += "' ";
            }
            // This is the string that the method constructs based on the input i am testing with 
            //"eventName = 'event six'  OR eventName = ' event two'  OR eventName = ' event one'  OR eventName = ' event seven' "
            using (SqlConnection sqlConnection = Globals.GetSqlConnection())
            {
                sqlConnection.Open();

                using (SqlCommand sqlCommand = new SqlCommand("SELECT * FROM questions WHERE " + EventsToRetrieve + ";", sqlConnection))
                {
                    using (SqlDataReader sqlDataReader = sqlCommand.ExecuteReader())
                    {
                        if (sqlDataReader != null)
                        {
                                while (sqlDataReader.Read())
                                {
                                    Event newEvent = new Event("", DateTime.MinValue, DateTime.MinValue);

                                    string startDateTimeStringFromDB = sqlDataReader["startDateDay"].ToString() + "-" + sqlDataReader["startDateMonth"].ToString() + "-" + sqlDataReader["startDateYear"].ToString();
                                    string endDateTimeStringFromDB = sqlDataReader["endDateDay"].ToString() + "-" + sqlDataReader["endDateMonth"].ToString() + "-" + sqlDataReader["endDateYear"].ToString();

                                    newEvent.EventName = sqlDataReader["eventName"].ToString();

                                    if (DateTime.TryParse(startDateTimeStringFromDB, out DateTime startDateTime))
                                    {
                                        newEvent.StartDate = startDateTime;
                                    }

                                    if (DateTime.TryParse(endDateTimeStringFromDB, out DateTime endDateTime))
                                    {
                                        newEvent.EndDate = endDateTime;
                                    }
                                    rtnList.Add(newEvent);
                                }
                        }
                    }
                }
            }
            return rtnList;
        }

Can anyone explain to me what i am doing wrong ? 谁能向我解释我做错了什么? I Also tried wrapping the while loop in a do while loop as suggested here How to read multiple resultset from SqlDataReader? 我还尝试按照此处的建议将while循环包装在do while循环中,如此处所建议的如何从SqlDataReader中读取多个结果集? but it didn't change anything. 但它并没有改变任何东西。

It doesn't seem to have any error in your code. 您的代码似乎没有任何错误。 however I believe that your query has errors. 但是,我相信您的查询有错误。

First of all never ever use string concatenation when you are building your SQL Query. 首先,在构建SQL查询时,永远不要使用字符串连接。 Instead use Parameterized Queries . 而是使用参数化查询

with the parameterized queries, it is even easier to debug your SQL statement since it does not include conditional string concatenations. 使用参数化查询,由于它不包含条件字符串连接,因此调试SQL语句甚至更加容易。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 C# 使用 SqlDataReader 从 SQL Server 检索数据到主详细列表 - C# retrieve data from SQL Server using SqlDataReader to Master Detail List 如何使用SqlDataReader从数据库中检索信息,C# - How to use SqlDataReader to retrieve information from database, c# 如何在C#Windows应用程序的图片框中从SQL Server数据库中检索多个图像? - How to retrieve multiple images from SQL Server database in picturebox in C# windows application? 如何在 C# 中从 SQL Server 数据库中检索数据? - How to retrieve data from a SQL Server database in C#? C#中使用SqlDataReader读取多行多列 - Read multiple rows and multiple columns using SqlDataReader in C# 如何使用 C# 从 SQL Server 数据库中逐行检索数据到 datagridview - How to retrieve data into a datagridview row by row from a SQL Server database using C# 如何使用 ASP.NET 从 SQL 服务器数据库中检索和显示 GridView 中的值 - How to retrieve and display values in GridView from SQL Server database in ASP.NET using C# C# 从 SqlDataReader 返回多列和多行 - C# return multiple columns and rows from SqlDataReader 如何使用C#将数据从SQL Server检索到DataTable - how to retrieve data from sql server to DataTable using c# 如何使用 C# 从 SQL Server 随机检索数据 - How to retrieve data RANDOMLY from SQL Server using C#
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM