У меня есть следующий код на C# WinForm, который создает запрос и передает его и параметр в функцию, которая запрашивает базу данных PostgreSQL:
DataTable dt = ((DataTable)dgvCategories.DataSource);
List<string> validationInfoResult = new List<string>();
for (intRowIndex = 0; intRowIndex <= dt.Rows.Count - 1; intRowIndex++)
{
strNewValueCat = dt.Rows[intRowIndex][1].ToString();
db getValidationInfo = new db();
strGetValidationInfoQuery = "SELECT validationdb, validationtable, validationfield, validationfield2, validationvalue2" +
" FROM masterfiles.categories" +
" WHERE category = @category";
validationInfoResult = getValidationInfo.GetValidationInfo(strGetValidationInfoQuery, strNewValueCat);
}
Как видите, Я перебираю DataTable DGV, собираю значение из определенной ячейки в текущей строке и передаю его как parmaeter в запрос db. Мне нужно вернуть значения из 5 полей, и я намерен поместить результат запроса в List<>
, а затем получить каждый из List<>
элементов в их собственную переменную для использования в форме.
My db Функция класса выглядит следующим образом:
public List<string> GetValidationInfo(string strQuery, string strCategory)
{
List<string> strResult = new List<string>();
using (NpgsqlConnection conn = new NpgsqlConnection(connString))
using (NpgsqlCommand cmd = new NpgsqlCommand(strQuery, conn))
{
cmd.Parameters.Add(new NpgsqlParameter("category", strCategory));
conn.Open();
using (NpgsqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
strResult.Add(reader.GetString(0));
Console.WriteLine("reader: " + reader.GetString(0));
}
}
}
return strResult;
}
Я построил приведенный выше код на основе ответа на этот вопрос SO .
Когда я его запускаю, Console.WriteLine()
только когда-либо выводит первое поле запроса, validationdb
, а затем переходит к следующей строке DataTable в вызывающем for
l oop. Проходя по коду во время выполнения, после первого попадания Console.WriteLine()
возвращается к while (reader.Read())
, затем выходит из while
l oop и возвращается к вызывающей функции.
Что неправильно в моем l oop, что он помещает только первое поле запроса в List<>
?