2014-01-15 4 views
1

. Я бы очень признателен, если кто-то может помочь мне решить эту проблему.npgsql, массивы и C# оператор не существует: текст [] = текст

Я разрабатываю приложение, использующее npgsql и C#, и когда я хочу получить некоторую информацию из таблицы, которая содержит столбец с массивом элементов, проблема начинается, когда я хочу использовать запрос следующим образом:

NpgsqlCommand cmd = new NpgsqlCommand("select * from book_editions", conn); 

компилятор показывает столбец, который содержит в качестве примера элементы ({1, 2, 3}) как «Data.System.String [] поэтому я попытался для устранения проблемы с использованием параметров .... , как показано ниже.

NpgsqlConnection conn = new NpgsqlConnection("Server=127.0.0.1;User Id=postgres; " +"Password=admin;Database=library_system;"); 
    conn.Open(); 

    //////string[] options = new string[] { "marketing", "m" }; already tried and failed 

    ArrayList l = new ArrayList(); 
     l.Add("2th"); 
     l.Add("3th"); 

     NpgsqlParameter p = new NpgsqlParameter("parameterlist", NpgsqlTypes.NpgsqlDbType.Array | NpgsqlTypes.NpgsqlDbType.Text); 

     NpgsqlCommand cmd = new NpgsqlCommand("select * from book_editions where editions = any (:parameterlist)", conn); 

     //editions is the column which has the array of elements, its datatype is text 

     p.Value = l.ToArray(); 
     cmd.Parameters.Add(p); 

    NpgsqlDataReader dr = cmd.ExecuteReader(); 

    while (dr.Read()) 

    Console.Write("{0} \n", dr[0].ToString()); 

    Console.ReadKey(); 

     conn.Close(); 

, когда я исполняю коду, cmd.ExecuteReader выдает эту ошибку:

npgsql was unhandled 
ERROR: 42883: el operador no existe: text[] = text 

я получил следующее предложение в качестве чаевых ....

Ningún operador coincide con el nombre y el tipo de los argumentos. Puede ser necesario agregar conversiones explícitas de tipos. (there is no operator which matches with the name and argument types, it would be required to add explicit type castings

ли кто-нибудь знает решение? :(:(я уже старался

+0

Пытались использовать список felipekm

+0

пока нет я был бы признателен, если мог бы дать мне пример, спасибо? вы очень много! – Andonirock

ответ

1

Обновлено:.!

var cmd = new NpgsqlCommand("select array_to_string(column, ', '),othercolumn,othercolumn from table",connection); 

    var l = new ArrayList(); 
    l.Add("2th"); 
    l.Add("3th"); 

    cmd.Parameters.Add(new NpgsqlParameter("parameterlist", NpgsqlDbType.Array | NpgsqlDbType.Varchar));  

    cmd.Parameters[0].Value = l.ToArray(); 

    var dr = cmd.ExecuteReader(); 

    while (dr.Read()) 
    Console.Write("{0} \n", dr[0].ToString()); 

    Console.ReadKey(); 
    conn.Close(); 

Попробуйте снова

+0

Большое вам спасибо за попытку вашего решения, и компилятор сейчас бросает следующую ошибку: ОШИБКА: 42704: no se pudo encontrar un tipo de array para el tipo de dato text [] ("" " было невозможно найти тип массива для текста типа данных []) – Andonirock

+0

Хорошо, попробуйте (попытка для: «NpgsqlDbType.VarChar», Я не уверен в этом, используйте ваш intelisense, измените cmd.parameters .... строка для: cmd.Parameters.Add ("@ parameterlist", NpgsqlDbType.Array | NpgsqlDbType.VarChar) .Value = l; Я отредактирую свое сообщение – felipekm

+0

Еще раз спасибо за ваше время :), к сожалению, он показывает мне ту же ошибку, что и раньше, но теперь с типом данных varchar ERROR: 42883: оператора не существует: text [] = символ меняется – Andonirock