У меня есть postgresql db и приложение C# для доступа к нему. У меня странная ошибка со значениями, возвращаемыми из команды NpgsqlDataAdapter.Fill в DataSet.C# и NpgsqlDataAdapter, возвращающие одну строку вместо таблицы данных
У меня этот код:
NpgsqlCommand n = new NpgsqlCommand();
n.Connection = connector; // a class member NpgsqlConnection
DataSet ds = new DataSet();
DataTable dt = new DataTable();
// DBTablesRef are just constants declared for
// the db table names and columns
ArrayList cols = new ArrayList();
cols.Add(DBTablesRef.all); //all is just *
ArrayList idCol = new ArrayList();
idCol.Add(DBTablesRef.revIssID);
ArrayList idVal = new ArrayList();
idVal.Add(idNum); // a function parameter
// Select builder and Where builder are just small
// functions that return an sql statement based
// on the parameters. n is passed to the where
// builder because the builder uses named
// parameters and sets them in the NpgsqlCommand
// passed in
String select = SelectBuilder(DBTablesRef.revTableName, cols) +
WhereBuilder(n,idCol, idVal);
n.CommandText = select;
try
{
NpgsqlDataAdapter da = new NpgsqlDataAdapter(n);
ds.Reset();
// filling DataSet with result from NpgsqlDataAdapter
da.Fill(ds);
// C# DataSet takes multiple tables, but only the first is used here
dt = ds.Tables[0];
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
Так что моя проблема заключается в следующем: чем выше код работает отлично, так же, как я хочу, чтобы это. Однако, если вместо того, чтобы делать выбор во всех (*), если я пытаюсь назвать отдельные столбцы для возврата из запроса, я получаю запрашиваемую информацию, но вместо того, чтобы разделить на отдельные записи в таблице данных, я получаю строку в первом индексе таблицы данных, которые выглядели что-то вроде:
«(0,5, ложь, Боб Смит, 7)»
И данные верны, я бы ожидать 0, то 5, затем логический, затем некоторый текст и т. д. Но я (очевидно) предпочел бы, чтобы он не возвращался как одна большая строка.
Кто-нибудь знает, почему, если я делаю выбор в * Я получаю данные, как ожидалось, но если я делаю выбор в определенных столбцах, я получаю таблицу данных с одной записью, которая является строкой значений, которые я запрашиваю ?