在尝试使用以下代码时,我收到此错误:
消息:参数类型无效: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数据库中的简单表。
我做错了什么?
非常感谢任何帮助。
答案 0 :(得分:0)
对于像我这样的新手,DeriveParameters的上述用法是正确的 - 来自Npgsql的错误消息也是如此。基本问题是PostgreSQL存储函数的接口只能使用NpgsqlDbType枚举指定的DbTypes。 NpgsqlDbType中不存在复合类型“Object”或“View_dx”(此时),因此DerviveParameters失败。
我的解决方案是将对象序列化为NpgsqlDbType允许的一个或多个枚举,并相应地更改存储过程接口。