关于c#:Npgsql语法错误“或”附近

Npgsql Syntax Error at or near “:”

我已经看了几天了,我已经做了很多测试,但我仍然无法让它工作。 我正在使用Npgsql 2.0.11.91(我也试过2.0.11)和PostgreSQL 9.04。

使用Npgsql用户手册中的示例,可以在此处找到。 搜索"使用.NET数据集"以查看示例。 它对我来说很好,但我正在尝试修改它以满足我的需要。

我的代码如下。 无论我尝试什么,我都会遇到某种错误。 使用下面的代码几乎正是用户手册中的内容我得到的NpgsqlException未被用户代码处理

1
ERROR: 42601: syntax error at or near":".
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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();
}

有任何想法吗?

皮特。


您添加param e两次,而根本不添加param d ...

编辑(来自上面的代码):

1
2
da.InsertCommand.Parameters.Add(new NpgsqlParameter("e", NpgsqlDbType.Varchar));
da.InsertCommand.Parameters.Add(new NpgsqlParameter("e", NpgsqlDbType.Varchar));


我也遇到问题,遵循npgsql文档,并在使用冒号声明参数时出错。
事实证明,在最新版本中,您可以使用.NET样式AddWithValue,例如,

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