Синтаксическая ошибка Npgsql в или рядом с ":" - PullRequest
1 голос
/ 20 июля 2011

Я смотрю на это уже несколько дней и много тестирую, но до сих пор не могу заставить его работать. Я использую Npgsql 2.0.11.91 (я тоже пробовал 2.0.11) и PostgreSQL 9.04.

Используя пример из Руководства пользователя для Npgsql, которое можно найти здесь . Найдите «Работа с наборами данных .NET», чтобы увидеть пример. Он отлично работает для меня, как есть, но я пытаюсь изменить его в соответствии с моими потребностями.

Мой код указан ниже. Что бы я ни пытался, я получаю какую-то ошибку. Используя приведенный ниже код, который в точности совпадает с приведенным в руководстве пользователя, я получаю исключение NpgsqlException, которое не обрабатывается кодом пользователя

ERROR: 42601: syntax error at or near ":".
private void tryThis()
{
    // This method expects the following table in the backend:
    //
    //  create table customers(code varchar, reference varchar, description varchar, street varchar, suburb varchar, postcode varchar);
    //
    //

    NpgsqlConnection conn = new NpgsqlConnection("Server=127.0.0.1;Port=5432;User Id=postgres;Password=password;Database=testdatabase;");
    conn.Open();

    DataSet ds = new DataSet();

    NpgsqlDataAdapter da = new NpgsqlDataAdapter("select * from customers", conn);

    da.InsertCommand = new NpgsqlCommand("insert into customers(code, reference, description, street, suburb, postcode) " +
                                " values (:a, :b, :c, :d, :e, :f)", conn);

    da.InsertCommand.Parameters.Add(new NpgsqlParameter("a", NpgsqlDbType.Varchar));
    da.InsertCommand.Parameters.Add(new NpgsqlParameter("b", NpgsqlDbType.Varchar));
    da.InsertCommand.Parameters.Add(new NpgsqlParameter("c", NpgsqlDbType.Varchar));
    da.InsertCommand.Parameters.Add(new NpgsqlParameter("e", NpgsqlDbType.Varchar));
    da.InsertCommand.Parameters.Add(new NpgsqlParameter("e", NpgsqlDbType.Varchar));
    da.InsertCommand.Parameters.Add(new NpgsqlParameter("f", NpgsqlDbType.Varchar));

    da.InsertCommand.Parameters[0].Direction = ParameterDirection.Input;
    da.InsertCommand.Parameters[1].Direction = ParameterDirection.Input;
    da.InsertCommand.Parameters[2].Direction = ParameterDirection.Input;
    da.InsertCommand.Parameters[3].Direction = ParameterDirection.Input;
    da.InsertCommand.Parameters[4].Direction = ParameterDirection.Input;
    da.InsertCommand.Parameters[5].Direction = ParameterDirection.Input;

    da.InsertCommand.Parameters[0].SourceColumn = "code";
    da.InsertCommand.Parameters[1].SourceColumn = "reference";
    da.InsertCommand.Parameters[2].SourceColumn = "description";
    da.InsertCommand.Parameters[3].SourceColumn = "street";
    da.InsertCommand.Parameters[4].SourceColumn = "suburb";
    da.InsertCommand.Parameters[5].SourceColumn = "postcode";

    da.Fill(ds);

    DataTable dt = ds.Tables[0];

    DataRow dr = dt.NewRow();
    dr["code"] = "CUST1";
    dr["reference"] = "C";
    dr["description"] = "Customer 1";
    dr["street"] = "1 Big Street";
    dr["suburb"] = "BRISBANE QLD";
    dr["postcode"] = "4000";
    dt.Rows.Add(dr);

    DataSet ds2 = ds.GetChanges();

    da.Update(ds2);

    ds.Merge(ds2);
    ds.AcceptChanges();
}

Есть идеи?

Пит.

Ответы [ 2 ]

4 голосов
/ 20 июля 2011

Вы добавляете параметр e дважды, не добавляя параметр d вообще ...

РЕДАКТИРОВАТЬ (из вашего кода выше):

da.InsertCommand.Parameters.Add(new NpgsqlParameter("e", NpgsqlDbType.Varchar));
da.InsertCommand.Parameters.Add(new NpgsqlParameter("e", NpgsqlDbType.Varchar));
1 голос
/ 22 сентября 2011

У меня также были проблемы, следуя документации по npgsql и получая ошибки при объявлении параметров с двоеточием. Оказывается, в последней версии вы можете использовать .NET стиль AddWithValue, например,

cmd.Parameters.AddWithValue("@paramName", paramValue);
...