2010-03-22 2 views
1

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

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

ответ

1

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

Смежные вопросы