Npgsql在CommandBuilder DeriveParameters上失败

时间:2015-05-16 14:24:58

标签: postgresql npgsql

在尝试使用以下代码时,我收到此错误:

  

消息:参数类型无效:277447   来源:Npgsql

程序在执行时爆炸:

  

NpgsqlCommandBuilder.DeriveParameters(CMD);

   NpgsqlConnection conn = new NpgsqlConnection();
                conn.ConnectionString = connection.ConnectionString;
                conn.Open();
                using (var cmd = conn.CreateCommand())
                {
                    cmd.CommandText = "g_savedx";
                    cmd.CommandType = CommandType.StoredProcedure;
                    NpgsqlCommandBuilder.DeriveParameters(cmd);
                    cmd.Parameters["_cpatient"].Value = cpatient;
                    cmd.Parameters["o"].Value = olddx;
                    cmd.Parameters["n"].Value = newdx;
                    var rowsAffected = cmd.ExecuteNonQuery(); 
                }

PostgreSQL 9.1存储过程定义为:

  

功能g_savedx(_cpatient text,o view_dx,n view_dx)     退回无效

其中view_dx是PostgreSQL数据库中的简单表。

我做错了什么?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

对于像我这样的新手,DeriveParameters的上述用法是正确的 - 来自Npgsql的错误消息也是如此。基本问题是PostgreSQL存储函数的接口只能使用NpgsqlDbType枚举指定的DbTypes。 NpgsqlDbType中不存在复合类型“Object”或“View_dx”(此时),因此DerviveParameters失败。

我的解决方案是将对象序列化为NpgsqlDbType允许的一个或多个枚举,并相应地更改存储过程接口。