2017-06-12 4 views
0

私はPostgreSQL dbmsに接続するためにUbuntu上で.NET Npgsqlライブラリを使用しています。私のデータベースでUbuntuで.NETを使用しているNpgsql:データベースクエリ結果をコンソールに書き込む方法は?

私はSETOF SELECTクエリ結果を返すと宣言FUNCTION「user_plan()」、持っている:予想通り、私は、psqlの環境から直接すべての中華鍋をそれをテストする場合

CREATE FUNCTION user_plan(varchar(20), int) RETURNS SETOF user_plan_type AS 
$$ 
    SELECT pr.participant, t.talk_id, t.start_time, t.description, t.room 
    FROM talks t JOIN participant_registrations pr USING(event) 
    WHERE pr.participant=$1 
    ORDER BY 3 
    LIMIT $2; 
$$ LANGUAGE SQL; 

を。しかし、私はどちらか、このようNpgsqlライブラリを使用して関数を呼び出すとき:

using (var query = new NpgsqlCommand()) 
{ 
    query.Connection = conn; 
    query.CommandText = "SELECT user_plan(@user, @limit::int)"; 
    query.Parameters.AddWithValue("user", login); 
    query.Parameters.AddWithValue("limit", limit); 
    using (var dr = query.ExecuteReader()) { 
     while(dr.Read()){ 
      Console.Write("{0} \n", dr[0]); 
     } 
    } 
} 

またはこの方法:私はちょうど書きたかった

System.Collections.ListDictionaryInternal: 
The field 'user_plan' has a type currently unknown to Npgsql (OID 16642). 
You can retrieve it as a string by marking it as unknown, please see the FAQ. 

:私は次のエラーを持っている

using (var query = new NpgsqlCommand()) 
{ 
    query.Connection = conn; 
    query.CommandText = "SELECT user_plan(@user, @limit::int)"; 
    query.Parameters.AddWithValue("user", login); 
    query.Parameters.AddWithValue("limit", limit); 
    using (var dr = query.ExecuteReader()) { 
     while(dr.Read()){ 
      Console.WriteLine(dr.GetString(0)); 
     } 
    } 
} 

user_plan()クエリの結果セットをコンソール化します。どうしたらいいですか?

+1

エラーが* *クエリについてです。クエリからユーザー定義型を返しますが、文字列として読み取るようにします(そうではありません)。これはConsoleやUbuntuとは関係ありません。 –

+0

Ok、私はそれを理解しました。これは次のようになっているはずです: 'query.CommandText =" SELECT * FROM user_plan(@user、@limit :: int) "; – igor

答えて

0

問題はqueryにあります。戻り値ではなく関数の型を返します。代わりの

query.CommandText = "SELECT user_plan(@user, @limit::int)"; 

がされている必要があります:

query.CommandText = "SELECT * FROM user_plan(@user, @limit::int)"; 
関連する問題