[英]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.