C # и NpgsqlDataAdapter, возвращающие одну строку вместо таблицы данных - PullRequest
1 голос
/ 22 марта 2010

У меня есть postgresql db и приложение на C # для доступа к нему. У меня странная ошибка со значениями, которые я возвращаю из команды NpgsqlDataAdapter.Fill в DataSet.

У меня есть этот код:

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, затем логическое значение, затем некоторый текст и т. Д. Но я (очевидно) предпочел бы, чтобы он не возвращался как одна большая строка.

Кто-нибудь знает, почему, если я делаю выбор для *, я получаю таблицу данных, как и ожидалось, но если я делаю выборку для определенных столбцов, я получаю таблицу данных с одной записью, которая является строкой значений, которые я запрашиваю?

1 Ответ

1 голос
/ 23 марта 2010

Хорошо, я понял, это было в функции SelectBuilder. Когда в операторе select было указано более одного столбца, он заключал столбцы в (), и, очевидно, это заставляет либо postgreSQL, либо Npgsql интерпретировать это как желание вернуть список в виде строки.

...