Это код, который у меня есть. Он отлично работает, но возвращает только одну строку. Как вы можете видеть в SQL-заявлении мне нужно 2 строки, возвращаемые в datagrid, которые я использую в форме. Хотя процедура читает 2 строки, она отображает только одну строку. NameAddrmark - это конструктор для полей.Как получить несколько строк от Datareader
public NameAddrmark GetNameRespCommentData(string respid)
{
NameAddrmark cms = new NameAddrmark();
//var cms = new List<NameAddrmark>();
SqlConnection connection = new SqlConnection(GeneralData.getConnectionString());
string sql = "SELECT top 2 * FROM dbo.RESPONDENT_COMMENT WHERE respid = " + GeneralData.AddSqlQuotes(respid) + " and USRNME = " + GeneralData.AddSqlQuotes(UserInfo.UserName) + " order by COMMDATE ASC";
SqlCommand command = new SqlCommand(sql, connection);
try
{
connection.Open();
SqlDataReader reader = command.ExecuteReader(CommandBehavior.SingleResult);
while(reader.Read())
//if (reader.Read())
{
cms.Id = respid;
cms.Date8 = reader["COMMDATE"].ToString();
cms.Usrnme = reader["USRNME"].ToString();
cms.Marktext = reader["COMMTEXT"].ToString();
}
//else
// cms = null;
}
catch (SqlException ex)
{
throw ex;
}
finally
{
connection.Close();
}
return cms;
}
В моей форме я возвращаю cms в список. Задайте источник данных в списке данных. Правильно отображает первую строку, но мне нужно отобразить две строки. Надеюсь, кто-то может помочь. Благодарю.
Вы просто устанавливаете поля cms каждый раз, почему бы это добавить информацию? – Egor
[SQL Injection alert] (http://msdn.microsoft.com/en-us/library/ms161953%28v=sql.105%29.aspx) - вы должны ** не ** объединять свои SQL-запросы - использовать ** параметризованные запросы ** вместо того, чтобы избежать SQL-инъекции –
Спасибо, изменил его на параметризованный запрос. – TonyM